sorting.c 726 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "sorting.h"
  2. unsigned chose_pivot(int first, int last)
  3. {
  4. return ( rand() % (last - first + 1) + first );
  5. }
  6. int partitionning(double *arr, int first, int last, int pivot)
  7. {
  8. double tmp;
  9. int i,j;
  10. tmp = arr[last];
  11. arr[last] = arr[pivot];
  12. arr[pivot] = tmp;
  13. j = first;
  14. for (i = first; i < last; i++)
  15. {
  16. if (arr[i] <= arr[last]){
  17. tmp = arr[i];
  18. arr[i] = arr[j];
  19. arr[j] = tmp;
  20. j++;
  21. }
  22. }
  23. tmp = arr[j];
  24. arr[j] = arr[last];
  25. arr[last] = tmp;
  26. return j;
  27. }
  28. void quicksort(double *arr, int first, int last)
  29. {
  30. if (first < last){
  31. int pivot = chose_pivot(first, last);
  32. int j;
  33. j = partitionning(arr, first, last, pivot);
  34. quicksort(arr, first, j - 1);
  35. quicksort(arr, j + 1, last);
  36. }
  37. }