Реализации быстрой сортировки

Pascal

Без читов С читами
  1. const
  2. MAXN = 100000;
  3.  
  4. var
  5. a: array [1..MAXN] of longint;
  6.  
  7. procedure swap(var a, b: longint);
  8. var
  9. temp: longint;
  10. begin
  11. temp := a;
  12. a := b;
  13. b := temp;
  14. end;
  15.  
  16. procedure quicksort(l, r: longint);
  17. var
  18. border, i: longint;
  19. begin
  20. if l < r then begin
  21. border := l;
  22. for i := l to r - 1 do
  23. if (a[i] < a[r]) then begin
  24. swap(a[border], a[i]);
  25. inc(border);
  26. end;
  27. swap(a[border], a[r]);
  28. quicksort(l, border - 1);
  29. quicksort(border + 1, r);
  30. end;
  31. end;
  32.  
  33. var
  34. n, i: longint;
  35.  
  36. begin
  37. read(n);
  38. for i := 1 to n do
  39. read(a[i]);
  40.  
  41. quicksort(1, n);
  42.  
  43. for i := 1 to n do
  44. write(a[i], ' ');
  45. end.
  46.  
  1. const
  2. MAXN = 100000;
  3.  
  4. var
  5. a: array [1..MAXN] of longint;
  6.  
  7. procedure swap(var a, b: longint);
  8. var
  9. temp: longint;
  10. begin
  11. temp := a;
  12. a := b;
  13. b := temp;
  14. end;
  15.  
  16. procedure quicksort(l, r: longint);
  17. var
  18. border, i: longint;
  19. begin
  20. if l < r then begin
  21. swap(a[random(r - l + 1) + l], a[r]);
  22. border := l;
  23. for i := l to r - 1 do
  24. if (a[i] < a[r]) or ((a[i] = a[r]) and (random(2) = 1)) then begin
  25. swap(a[border], a[i]);
  26. inc(border);
  27. end;
  28. swap(a[border], a[r]);
  29. quicksort(l, border - 1);
  30. quicksort(border + 1, r);
  31. end;
  32. end;
  33.  
  34. var
  35. n, i: longint;
  36.  
  37. begin
  38. read(n);
  39. for i := 1 to n do
  40. read(a[i]);
  41.  
  42. quicksort(1, n);
  43.  
  44. for i := 1 to n do
  45. write(a[i], ' ');
  46. end.
  47.