quicksort (tsz. quicksorts)
Itt egy egyszerű és érthető implementációja a quicksort algoritmusnak C++-ban, magyar nyelvű kommentekkel magyarázva:
#include <iostream>
#include <vector>
// Partíció függvény
int particio(std::vector<int>& tomb, int bal, int jobb) {
int pivot = tomb; // Pivot elem kiválasztása
int i = bal - 1;
for (int j = bal; j <= jobb - 1; ++j) {
if (tomb <= pivot) {
++i;
std::swap(tomb, tomb); // Csere, ha kisebb vagy egyenlő a pivotnál
}
}
std::swap(tomb, tomb); // Pivot elem a helyére kerül
return (i + 1);
}
// Quicksort rekurzív függvény
void quicksort(std::vector<int>& tomb, int bal, int jobb) {
if (bal < jobb) {
int pivot_index = particio(tomb, bal, jobb);
quicksort(tomb, bal, pivot_index - 1); // Bal oldali rész rendezése
quicksort(tomb, pivot_index + 1, jobb); // Jobb oldali rész rendezése
}
}
// Segédfüggvény a quicksort hívására
void quicksort(std::vector<int>& tomb) {
quicksort(tomb, 0, tomb.size() - 1);
}
int main() {
std::vector<int> tomb = {45, 12, 78, 34, 23, 89, 5, 67};
std::cout << "Rendezes elott:\n";
for (const auto& elem : tomb)
std::cout << elem << " ";
std::cout << "\n";
quicksort(tomb);
std::cout << "Rendezes utan (quicksort):\n";
for (const auto& elem : tomb)
std::cout << elem << " ";
std::cout << "\n";
return 0;
}
Kiválaszt egy ún. pivot elemet (ebben az implementációban ez a tömb utolsó eleme).
Átrendezi a tömböt úgy, hogy a pivotnál kisebb elemek balra, a nagyobbak jobbra kerüljenek.
Rekurzívan rendezi a pivot bal és jobb oldalát.
O(N log N)
O(N²)
O(N log N)
A gyakorlatban a quicksort általában gyors és hatékony, és az egyik leggyakrabban használt rendező algoritmus.