Advertisement
Guest User

Untitled

a guest
Oct 9th, 2015
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "funcsSort.h"
  4.  
  5. void partition(int a[], int l, int r, int *i, int *j)
  6. {
  7. *i = l-1, *j = r;
  8. int p = l-1, q = r;
  9. int v = a[r];
  10.  
  11. while (1)
  12. {
  13.  
  14. while (a[++(*i)] < v);
  15. while (v < a[--(*j)])
  16. if (*j == l)
  17. break;
  18.  
  19.  
  20. if (*i >= (*j))
  21.  
  22. swap(&a[(*i)], &a[(*j)]);
  23.  
  24.  
  25. if (a[(*i)] == v)
  26. {
  27. p++;
  28. swap(&a[p], &a[(*i)]);
  29. }
  30.  
  31. if (a[(*j)] == v)
  32. {
  33. q--;
  34. swap(&a[(*j)], &a[q]);
  35. }
  36. }
  37.  
  38. swap(&a[(*i)], &a[r]);
  39.  
  40. int k;
  41. *j = (*i)-1;
  42. for (k = l; k < p; k++, (*j)--)
  43. swap(&a[k], &a[(*j)]);
  44.  
  45.  
  46. *i = (*i)+1;
  47. for (k = r-1; k > q; k--, (*i)++)
  48. swap(&a[(*i)], &a[k]);
  49. }
  50.  
  51. void quickSort3way(int a[], int l, int r)
  52. {
  53. if (r <= l) return;
  54.  
  55. int i, j;
  56.  
  57.  
  58. partition(a, l, r, &i, &j);
  59.  
  60. quickSort3way(a, l, j);
  61. quickSort3way(a, i, r);
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement