25_quicksort.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include <stdio.h>
  2. int array[16];
  3. //Swap integer values by array indexes
  4. void swap(int a, int b)
  5. {
  6. int tmp = array[a];
  7. array[a] = array[b];
  8. array[b] = tmp;
  9. }
  10. //Partition the array into two halves and return the
  11. //index about which the array is partitioned
  12. int partition(int left, int right)
  13. {
  14. int pivotIndex = left;
  15. int pivotValue = array[pivotIndex];
  16. int index = left;
  17. int i;
  18. swap(pivotIndex, right);
  19. for(i = left; i < right; i++)
  20. {
  21. if(array[i] < pivotValue)
  22. {
  23. swap(i, index);
  24. index += 1;
  25. }
  26. }
  27. swap(right, index);
  28. return index;
  29. }
  30. //Quicksort the array
  31. void quicksort(int left, int right)
  32. {
  33. if(left >= right)
  34. return;
  35. int index = partition(left, right);
  36. quicksort(left, index - 1);
  37. quicksort(index + 1, right);
  38. }
  39. int main()
  40. {
  41. int i;
  42. array[0] = 62;
  43. array[1] = 83;
  44. array[2] = 4;
  45. array[3] = 89;
  46. array[4] = 36;
  47. array[5] = 21;
  48. array[6] = 74;
  49. array[7] = 37;
  50. array[8] = 65;
  51. array[9] = 33;
  52. array[10] = 96;
  53. array[11] = 38;
  54. array[12] = 53;
  55. array[13] = 16;
  56. array[14] = 74;
  57. array[15] = 55;
  58. for (i = 0; i < 16; i++)
  59. printf("%d ", array[i]);
  60. printf("\n");
  61. quicksort(0, 15);
  62. for (i = 0; i < 16; i++)
  63. printf("%d ", array[i]);
  64. printf("\n");
  65. return 0;
  66. }
  67. /* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/