koktélrendezés
CocktailSort(A): n = A hossza swapped = igaz bal = 0 jobb = n - 1 amíg swapped: swapped = hamis // Balról jobbra haladás ciklus i = bal-tól jobb-1-ig: ha A > A: cseréljük meg A és A értékét swapped = igaz jobb = jobb - 1 // Jobbról balra haladás ciklus i = jobb-tól bal-ig hátrafelé: ha A > A: cseréljük meg A és A értékét swapped = igaz bal = bal + 1
def cocktail_sort(arr):
n = len(arr)
swapped = True
start = 0
end = n - 1
while swapped:
swapped = False
# Balról jobbra haladás
for i in range(start, end):
if arr > arr:
arr, arr = arr, arr
swapped = True
end -= 1
# Ha nem történt csere, a tömb rendezett
if not swapped:
break
swapped = False
# Jobbról balra haladás
for i in range(end, start, -1):
if arr > arr:
arr, arr = arr, arr
swapped = True
start += 1
# Példa
data =
cocktail_sort(data)
print("Rendezett tömb:", data)
# Kimenet: Rendezett tömb:
#include <iostream>
#include <vector>
using namespace std;
void cocktailSort(vector<int>& arr) {
bool swapped = true;
int start = 0, end = arr.size() - 1;
while (swapped) {
swapped = false;
// Balról jobbra haladás
for (int i = start; i < end; ++i) {
if (arr > arr) {
swap(arr, arr);
swapped = true;
}
}
--end;
// Ha nem történt csere, a tömb rendezett
if (!swapped)
break;
swapped = false;
// Jobbról balra haladás
for (int i = end - 1; i >= start; --i) {
if (arr > arr) {
swap(arr, arr);
swapped = true;
}
}
++start;
}
}
int main() {
vector<int> data = {5, 1, 4, 2, 8, 0, 2};
cocktailSort(data);
cout << "Rendezett tömb: ";
for (int num : data) {
cout << num << " ";
}
cout << endl;
return 0;
}
A koktélrendezés javítja a hagyományos buborékrendezés teljesítményét azáltal, hogy mindkét irányban rendez. Bár továbbra is (O(n^2)) időkomplexitású, gyakran hatékonyabb, különösen akkor, ha az elemek nagy része már rendezett. Az algoritmus stabil és egyszerűen implementálható, ezért jó választás oktatási célokra vagy kisebb adathalmazok rendezésére.