مصورسازی تعاملی الگوریتم مرتبسازی هرمی
مرتبسازی هرمی (Heap Sort) یک الگوریتم مرتبسازی مبتنی بر مقایسه است که از ساختمان دادهی هرم دودویی (Binary Heap) استفاده میکند. این الگوریتم ابتدا آرایه ورودی را به یک Max-Heap تبدیل میکند و سپس با جابجایی ریشه (بزرگترین عنصر) با آخرین عنصر و کاهش اندازه هرم، آرایه را مرتب میکند.
Max-Heap یک درخت دودویی کامل است که در آن مقدار هر گره بزرگتر یا مساوی مقدار فرزندانش است. ریشه درخت همیشه بزرگترین عنصر را نگه میدارد.
void heapify(vector<int>& arr, int n, int i) {
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < n && arr[left] > arr[largest])
largest = left;
if (right < n && arr[right] > arr[largest])
largest = right;
if (largest != i) {
swap(arr[i], arr[largest]);
heapify(arr, n, largest);
}
}
void heapSort(vector<int>& arr) {
int n = arr.size();
// ساخت Max-Heap
for (int i = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
// استخراج عناصر از هرم
for (int i = n - 1; i > 0; i--) {
swap(arr[0], arr[i]);
heapify(arr, i, 0);
}
}
| حالت | پیچیدگی زمانی | توضیح |
|---|---|---|
| بهترین حالت | O(n log n) | حتی اگر آرایه مرتب باشد |
| حالت میانگین | O(n log n) | برای ورودیهای تصادفی |
| بدترین حالت | O(n log n) | تضمین شده برای هر ورودی |
| پیچیدگی فضایی | O(1) | مرتبسازی درجا (In-place) |
| الگوریتم | بهترین | میانگین | بدترین | پایدار؟ |
|---|---|---|---|---|
| Heap Sort | O(n log n) | O(n log n) | O(n log n) | ❌ |
| Quick Sort | O(n log n) | O(n log n) | O(n²) | ❌ |
| Merge Sort | O(n log n) | O(n log n) | O(n log n) | ✅ |
| Bubble Sort | O(n) | O(n²) | O(n²) | ✅ |
اعداد خود را با کاما یا فاصله وارد کنید: