voidquick_sort_v(vector<int>& a, int low, int high) { if (low > high)return; int i = low; int j = high; int key = a[low]; while (i < j) { while (i<j && a[j]>=key) { j--; } a[i] = a[j];//交换位置 while (i < j && a[i] =< key) { i++; } a[j] = a[i];//交换位置 } a[i] = key; quick_sort_v(a, low, i - 1); quick_sort_v(a, i + 1, high); }
voidheap_sort(std::vector<int>& a){ const std::size_t n = a.size(); if (n < 2) return;
// 内部下沉:把索引 i 的元素在 [0, heap) 范围内调整成最大堆位置 auto sift_down = [&](std::size_t i, std::size_t heap) { while (true) { std::size_t best = i; std::size_t L = 2*i + 1, R = L + 1; if (L < heap && a[best] < a[L]) best = L; if (R < heap && a[best] < a[R]) best = R; if (best == i) break; std::swap(a[i], a[best]); i = best; } };
// 建堆(最大堆) for (std::size_t i = n/2; i > 0; --i) sift_down(i - 1, n);