#include<iostream> #include<vector> using namespace std; void fun1(vector<int>& a)//插入排序 { if (a.size() == 1) return; for (int i = 1; i < a.size(); i++) { int key = a[i]; int j = i - 1; while (j >= 0 and a[j] > key) { a[j + 1] = a[j]; j--; } a[j + 1] = key; } } void fun2(vector<int> &a)//选择排序 { for (int i = 0; i < a.size(); i++) { int pos = i; for (int j = i + 1; j < a.size(); j++) { if (a[j] < a[pos]) pos = j; } swap(a[i], a[pos]); } } void fun3(vector<int>& a)//冒泡排序常规版本 { for (int i = a.size() - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (a[j] > a[j + 1]) swap(a[j], a[j + 1]); } } } void fun4(vector<int>& a)//堆排序 { for (int i = a.size() / 2; i >= 1; i--) down(i,n); for (int i = a.size(); i > 1; i--) { swap(a[1], a[i]); down(1, i - 1); } } int main1() { vector<int> run; int n; cin >> n; while (n--) { int k; cin >> k; run.push_back(k); } fun4(run); cout << "排序后:"; for (int e : run) { cout << e << " "; } return 0; }