Guest User

Untitled

a guest
Feb 19th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. void quicksort(a: T[n], int l, int r)
  2. T v = a[r]
  3. if (r <= l)
  4. return
  5. int i = l
  6. int j = r - 1
  7. int p = l - 1
  8. int q = r
  9. while true
  10. while (a[i++] < v)
  11. while (a[j--] > v)
  12. if (i == j)
  13. break
  14. if (i >= j)
  15. break
  16. swap(a[i], a[j])
  17. if (a[i] == v)
  18. p++
  19. swap(a[p], a[i])
  20. if (a[j] == v)
  21. q--
  22. swap(a[q], a[j])
  23. swap(a[i], a[r])
  24. j = i - 1
  25. i++
  26. for (int k = 1; k <= p; k++, j--)
  27. swap(a[k], a[j])
  28. for (int k = r - 1; k >= q; k--, i++)
  29. swap(a[k], a[i])
  30. quicksort(a, 1, j)
  31. quicksort(a, i, r)
  32.  
  33. void quicksort(int a[], int l, int r) {
  34. int v = a[r];
  35. if (r <= l)
  36. return;
  37. int i = l;
  38. int j = r-1;
  39. int p = l-1;
  40. int q = r;
  41.  
  42. while(true) {
  43. while (a[i++] < v);
  44. while (a[j--] > v);
  45. if (i >= j) {
  46. break;
  47. }
  48. exch(a, i, j);
  49. if (a[i] == v) {
  50. p++;
  51. exch(a, p, i);
  52. }
  53. if (a[j] == v) {
  54. q--;
  55. exch(a, q, j);
  56. }
  57. exch(a, i, r);
  58. j = i - 1;
  59. i++;
  60. for (int k = 1; k <= p; k++, j--) {
  61. exch(a, k, j);
  62. }
  63. for (int k = r - 1; k >= q; k--, i++) {
  64. exch(a, k, i);
  65. }
  66. quicksort(a, 1, j);
  67. quicksort(a, i, r);
  68. }
  69. }
  70.  
  71. void exch(int[] a, int i, int j){
  72. int swap = a[i];
  73. a[i] = a[j];
  74. a[j] = swap;
  75. }
Add Comment
Please, Sign In to add comment