QuickSort.pas 844 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. CONST
  2. NUM = 10000;
  3. var
  4. Ar : array [1..NUM] of word;
  5. i,j,tmp,Med : word;
  6. procedure QSort(l,r:word);
  7. begin
  8. if (r-l) <= 1 then
  9. begin
  10. if ar[l] < ar[r] then
  11. begin
  12. tmp := Ar[l];
  13. Ar[l] := Ar[r];
  14. Ar[r] := Tmp;
  15. end;
  16. exit;
  17. end;
  18. i := l;
  19. j := r;
  20. Med := Ar [(l+r) div 2];
  21. while j>=i do
  22. begin
  23. while (Ar[i]>Med) and (i<r) do inc(i);
  24. while (Ar[j]<Med) and (j>l) do dec(j);
  25. if (i<=j) then begin
  26. Tmp := Ar[i];
  27. Ar[i] := Ar[j];
  28. Ar[j] := Tmp;
  29. inc(i);dec(j);
  30. end;
  31. end;
  32. if (j>l) then Qsort(l,j);
  33. if (i<r) then Qsort(i,r)
  34. end;{QSort}
  35. {------------------------------------}
  36. BEGIN
  37. Randomize;
  38. for i := 1 to NUM do Ar[i] := Random(65535);
  39. Qsort(1,NUM);
  40. For i := 0 to NUM-1 do
  41. begin
  42. if (i mod 10) = 0 then WriteLn;
  43. Write(ar[i+1]:8);
  44. end;
  45. END.