fork download
  1. #include <stdio.h>
  2. #define SIZE 10
  3. void quick_sort(int *array, int low, int high);
  4. int partition(int *array, int low, int high);
  5. void heap_sort(int *array, int n);
  6. void heapify(int *array, int n, int i);
  7. void print_array(int *array, int size);
  8. int main() {
  9. int array[SIZE] = {5, 3, 8, 1, 2, 7, 4, 6, 10, 9};
  10. int array_copy[SIZE];
  11. for (int i = 0; i < SIZE; i++) {
  12. array_copy[i] = array[i];
  13. }
  14. quick_sort(array, 0, SIZE - 1);
  15. print_array(array, SIZE);
  16. heap_sort(array_copy, SIZE);
  17. print_array(array_copy, SIZE);
  18. return 0;
  19. }
  20. void quick_sort(int *array, int low, int high) {
  21. if (low < high) {
  22. int pi = partition(array, low, high);
  23. quick_sort(array, low, pi - 1);
  24. quick_sort(array, pi + 1, high);
  25. }
  26. }
  27. int partition(int *array, int low, int high) {
  28. int pivot = array[high];
  29. int i = (low - 1);
  30. for (int j = low; j < high; j++) {
  31. if (array[j] < pivot) {
  32. i++;
  33. int temp = array[i];
  34. array[i] = array[j];
  35. array[j] = temp;
  36. }
  37. }
  38. int temp = array[i + 1];
  39. array[i + 1] = array[high];
  40. array[high] = temp;
  41. return (i + 1);
  42. }
  43. void heap_sort(int *array, int n) {
  44. for (int i = n / 2 - 1; i >= 0; i--) {
  45. heapify(array, n, i);
  46. }
  47. for (int i = n - 1; i > 0; i--) {
  48. int temp = array[0];
  49. array[0] = array[i];
  50. array[i] = temp;
  51. heapify(array, i, 0);
  52. }
  53. }
  54. void heapify(int *array, int n, int i) {
  55. int largest = i;
  56. int left = 2 * i + 1;
  57. int right = 2 * i + 2;
  58.  
  59. if (left < n && array[left] > array[largest]) {
  60. largest = left;
  61. }
  62. if (right < n && array[right] > array[largest]) {
  63. largest = right;
  64. }
  65. if (largest != i) {
  66. int temp = array[i];
  67. array[i] = array[largest];
  68. array[largest] = temp;
  69. heapify(array, n, largest);
  70. }
  71. }
  72. void print_array(int *array, int size) {
  73. for (int i = 0; i < size; i++) {
  74. printf("%d ", array[i]);
  75. }
  76. printf("\n");
  77. }
Success #stdin #stdout 0.01s 5288KB
stdin
4 3 9 0 1 2 100 2 7 -1
stdout
1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10