Advertisement
xXx_Fortis_xXx

Untitled

Apr 12th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int cmpFunc (int *a, int *b){
  6.     return *a < *b;
  7. }
  8.  
  9. void bubbleSort (void *seq[], int len, int (*cmp)(void *, void *)){
  10.     void *t;
  11.     for (; len--;){
  12.         int flag = 0;
  13.         for (int i = 0; i < len; i++){
  14.             if (!(*cmp)(seq[i], seq[i+1])){
  15.                 t = seq[i];
  16.                 seq[i] = seq[i+1];
  17.                 seq[i+1] = t;
  18.                 flag = 1;
  19.             }
  20.         }
  21.         if (!flag){
  22.             break;
  23.         }
  24.     }
  25. }
  26.  
  27. void coctailSort (void *seq[], int len, int(*cmp)(void *, void *)){
  28.     int left = 0;
  29.     int right = len - 1;
  30.     while (left <= right){
  31.         int flag = 0;
  32.         for (int i = left; i < right; i++){;
  33.             if (!(*cmp)(seq[i], seq[i+1])){
  34.                 void *t = seq[i];
  35.                 seq[i] = seq[i+1];
  36.                 seq[i+1] = t;
  37.                 flag = 1;
  38.             }
  39.         }
  40.         if (!flag){
  41.             break;
  42.         }
  43.         right--;
  44.         flag = 0;
  45.         for (int i = right; i > left; i--){
  46.             if ((*cmp)(seq[i], seq[i-1])){
  47.                 void *t = seq[i];
  48.                 seq[i] = seq[i-1];
  49.                 seq[i-1] = t;
  50.                 flag = 1;
  51.             }
  52.         }
  53.         if (!flag){
  54.             break;
  55.         }
  56.         left++;
  57.     }
  58. }
  59.  
  60. void mergeSort (void *seq[], int len, int (*cmp)(void *, void *)){
  61.     if (len > 1){
  62.         int len1 = len/2;
  63.         int len2 = len - len1;
  64.         void **seq1 = seq;
  65.         void **seq2 = seq+len1;
  66.         mergeSort(seq1, len1, cmp);
  67.         mergeSort(seq2, len2, cmp);
  68.        
  69.         int i = 0;
  70.         int j = 0;
  71.         void* seqf[len];
  72.         for (int k = 0; k < len; k++){
  73.             if (i == len1){
  74.                 seqf[k] = seq2[j++];
  75.             }
  76.             else if (j == len2){
  77.                 seqf[k] = seq1[i++];
  78.             }
  79.             else if ((*cmp)(seq1[i], seq2[j])){
  80.                 seqf[k] = seq1[i++];
  81.             }
  82.             else{
  83.                 seqf[k] = seq2[j++];
  84.             }
  85.         }
  86.        
  87.         for (int n = 0; n < len; n++){
  88.             seq[n] = seqf[n];
  89.         }
  90.     }
  91. }
  92.  
  93. void radixSort (int seq[], int len, int elMaxLen, int range){
  94.     int **tempTable = malloc(sizeof(*tempTable)*range);
  95.     for (int i = 0; i < range; i++){
  96.         tempTable[i] = malloc(sizeof(**tempTable)*(len+1));
  97.         tempTable[i][0] = 0;
  98.     }
  99.    
  100.     for (int i = 0; i < elMaxLen; i++){
  101.         for (int n = 0; n < 8; n++){
  102.             printf("%d%s", seq[n], n == 7 ? "\n" : " ");
  103.         }
  104.         for (int j = 0; j < len; j++){
  105.             int key = seq[j]/((int)pow(10, i))%10;
  106.             tempTable[key][++tempTable[key][0]] = seq[j];
  107.         }
  108.         int j = 0;
  109.         for (int k = 0; k < range; k++){
  110.             for (int l = 0; l < tempTable[k][0]; l++){
  111.                 seq[j++] = tempTable[k][l+1];
  112.             }
  113.             tempTable[k][0] = 0;
  114.         }
  115.     }
  116.    
  117.     for (int i = 0; i < range; i++){
  118.         free(tempTable[i]);
  119.     }
  120.     free(tempTable);
  121. }
  122.  
  123. int main (int argc, char **argv){/*
  124.     int a = 1;
  125.     int b = 2;
  126.     int c = 3;
  127.     int d = 4;
  128.     int e = 5;
  129.     int f = 6;
  130.     int g = 7;
  131.     int h = 8;
  132.     int *arr[8] = {&a, &f, &c, &e, &b, &g, &d, &h};
  133.     mergeSort((void **)arr, 8, (int (*)(void *, void *))cmpFunc);
  134.     for (int i = 0; i < 8; i++){
  135.         printf("%d%s", *arr[i], i == 7 ? "\n" : " ");
  136.     }*/
  137.     int arr[] = {82, 12, 26, 76, 64, 34, 45, 58};
  138.     radixSort(arr, 8, 2, 10);
  139.     for (int i = 0; i < 8; i++){
  140.         printf("%d%s", arr[i], i == 7 ? "\n" : " ");
  141.     }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement