fork download
  1. #include <stdio.h>
  2.  
  3. void siftDown(int numbers[], int root, int bottom);
  4.  
  5. void heapSort(int numbers[], int array_size)
  6. {
  7. int i, temp;
  8.  
  9. for (i = (array_size / 2)-1; i >= 0; i--)
  10. siftDown(numbers, i, array_size);
  11.  
  12. for (i = array_size-1; i >= 1; i--)
  13. {
  14. temp = numbers[0];
  15. numbers[0] = numbers[i];
  16. numbers[i] = temp;
  17. siftDown(numbers, 0, i-1);
  18. }
  19. }
  20.  
  21.  
  22. void siftDown(int numbers[], int root, int bottom)
  23. {
  24. int done, maxChild, temp;
  25.  
  26. done = 0;
  27. while ((root*2 <= bottom) && (!done))
  28. {
  29. if (root*2 == bottom)
  30. maxChild = root * 2;
  31. else if (numbers[root * 2] > numbers[root * 2 + 1])
  32. maxChild = root * 2;
  33. else
  34. maxChild = root * 2 + 1;
  35.  
  36. if (numbers[root] < numbers[maxChild])
  37. {
  38. temp = numbers[root];
  39. numbers[root] = numbers[maxChild];
  40. numbers[maxChild] = temp;
  41. root = maxChild;
  42. }
  43. else
  44. done = 1;
  45. }
  46. }
  47.  
  48. int main() {
  49. int a[] = {66,4,23,4,78,6,44,11,22,1,99};
  50. int n = sizeof(a) / sizeof(a[0]);
  51. int i;
  52. heapSort(a, n);
  53. for (i=0; i<n; i++)
  54. printf("%d ", a[i]);
  55. return 0;
  56. }
  57.  
Success #stdin #stdout 0.02s 1676KB
stdin
Standard input is empty
stdout
1 4 4 6 11 22 23 44 66 99 78