تخيل عندك ورق كوتشينة وعايز ترتبه:
عادة آخر عنصر أو عشوائي
رتب حوالين الـ Pivot
كرر للشمال واليمين
O(n log n)
لما الـ Pivot بيقسم بالتساوي
O(n²)
لما الـ array مترتبة و Pivot سيء
الخطوة الأهم في QuickSort
مثال: ترتيب [8, 3, 7, 1, 5, 9, 2]
Pivot = 2 (آخر عنصر)
الـ Pivot = 2 (آخر عنصر)
1 أصغر من 2، نحركه للشمال
🎯 الـ Pivot (2) في مكانه الصح الآن!
💡 الفكرة:
بعد الـ Partition:
• الـ Pivot في مكانه النهائي
• كل اللي على شماله أصغر منه
• كل اللي على يمينه أكبر منه
Click "Sort" to start.
function quickSort(arr, lo = 0, hi = arr.length - 1) {
if (lo >= hi) return;
const pivotIdx = partition(arr, lo, hi);
quickSort(arr, lo, pivotIdx - 1);
quickSort(arr, pivotIdx + 1, hi);
}
function partition(arr, lo, hi) {
const pivot = arr[hi];
let i = lo - 1;
for (let j = lo; j < hi; j++) {
if (arr[j] < pivot) {
i++;
[arr[i], arr[j]] = [arr[j], arr[i]];
}
}
[arr[i + 1], arr[hi]] = [arr[hi], arr[i + 1]];
return i + 1;
}
| QuickSort | MergeSort | |
|---|---|---|
| Average Time | O(n log n) | O(n log n) |
| Worst Time | O(n²) | O(n log n) |
| Space | O(log n) | O(n) |
| In-place? | ✓ Yes | ✗ No |
| Stable? | ✗ No | ✓ Yes |