Implementarea algoritmului de sortare QuickSort în Delphi

Una dintre problemele obișnuite în programare este de a sorta o serie de valori într-o anumită ordine (crescătoare sau descendentă).

Deși există numeroși algoritmi de sortare „standard”, QuickSort este unul dintre cele mai rapide. Quicksort sortează folosind un împărțiți și cuceriți strategia pentru a împărți o listă în două sub-liste.

Algoritmul QuickSort

Conceptul de bază este să alegeți unul dintre elementele din tablou, numit a pivot. În jurul pivotului, vor fi reorganizate alte elemente. Totul decât pivotul este mutat în stânga pivotului - în partiția din stânga. Totul mai mare decât pivotul merge în partiția potrivită. În acest moment, fiecare partiție este „sortată rapid” recursiv..

Iată algoritmul QuickSort implementat în Delphi:

 procedură Sortare rapida(var A: o serie de Întreg; iLo, iHi: Integer);
var
  Lo, Bună, Pivot, T: Integer;
începe
  Lo: = iLo;
  Bună: = iHi;
  Pivot: = A [(Lo + Hi) div 2];
  repeta
    in timp ce A [Lo] < Pivot do Inc (Lo);
    in timp ce A [Bună]> Pivot do Dec (Bună);
    dacă iată <= Hi apoi
    începe
      T: = A [Lo];
      A [Lo]: = A [Bună];
      A [Bună]: = T;
      Inc (Lo);
      Dec (Bună);
    Sfârșit;
  pana cand Lo> Bună;
  dacă Bună> iLo apoi QuickSort (A, iLo, Bună);
  dacă iată < iHi apoi QuickSort (A, Lo, iHi);
Sfârșit;

utilizare:

 var
  intArray: o serie de întreg;
începe
  SetLength (intArray, 10);
  // Adăugați valori la intArray
  intArray [0]: = 2007;
  ...
  intArray [9]: = 1973;
  //fel
  QuickSort (intArray, Low (intArray), High (intArray));

Notă: în practică, QuickSort devine foarte lent atunci când tabloul trecut la acesta este deja aproape de a fi sortat.

Există un program demonstrativ care se livrează cu Delphi, numit „thrddemo” în folderul „Fire”, care arată două algoritmi de sortare suplimentari: Sortare cu bule și Sortare selecție.