Advertisement
xXx_Fortis_xXx

Untitled

May 11th, 2018
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.33 KB | None | 0 0
  1. void shellSort (int *array, int len, int *seq, int seqLen){
  2.     int i;
  3.     for (i = seqLen - 1; seq[i] > len / 2 && i > 0; i--);
  4.    
  5.     while (i >= 0){
  6.         int n = seq[i];
  7.         for (int j = n; j < len; j++){
  8.             int t = array[j];
  9.             int k;
  10.             for (k = j; k >= n && t < array[k - n]; k -= n){
  11.                 array[k] = array[k - n];
  12.             }
  13.             array[k] = t;
  14.         }
  15.         i--;
  16.     }
  17. }
  18.  
  19. void sink (int *array, int len, int i){
  20.     while (i < len){
  21.         int root = i;
  22.         int lChild = i * 2 + 1;
  23.         int rChild = i * 2 + 2;
  24.        
  25.         if (lChild < len && array[lChild] > array[root]){
  26.             root = lChild;
  27.         }
  28.        
  29.         if (rChild < len && array[rChild] > array[root]){
  30.             root = rChild;
  31.         }
  32.        
  33.         if (root == i){
  34.             return;
  35.         }
  36.        
  37.         int t = array[root];
  38.         array[root] = array[i];
  39.         array[i] = t;
  40.        
  41.         i = root;
  42.     }
  43. }
  44.  
  45. void buildHeap (int *array, int len){
  46.     int index = len / 2;
  47.    
  48.     for (; index--;){
  49.         sink(array, len, index);
  50.     }
  51. }
  52.  
  53. void heapSort (int *array, int len){
  54.     buildHeap(array, len);
  55.    
  56.     for(; len--;){
  57.         int t = array[0];
  58.         array[0] = array[len];
  59.         array[len] = t;
  60.         sink(array, len, 0);
  61.     }
  62. }
  63.  
  64. int main (int argc, char **argv){
  65.     int d[] = {1, 4, 10, 23, 57, 132, 301, 701, 1750};
  66.     int arr[] = {1, 3, 5, 7, 9, 0, 8, 6, 4, 2};
  67. //  shellSort(arr, 10, d, 9);
  68.     heapSort(arr, 10);
  69.     for (int i = 0; i < 10; i++){
  70.         printf("%d%s", arr[i], i == 9 ? "\n" : " ");
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement