#include <iostream>
using namespace std;
void HeapAdjust(int tree[], int n, int i){
if(i >= n) return;
int lchild = 2 * i + 1;
int rchild = 2 * i + 2;
int max = i;
if(lchild < n && tree[lchild] > tree[max])
max = lchild;
if(rchild < n && tree[rchild] > tree[max])
max = rchild;
if(max != i){
swap(tree[max], tree[i]);
HeapAdjust(tree, n, max);
}
}
void HeapBuild(int tree[], int n){
int LastNode = n - 1;
int parent = (LastNode - 1) / 2;
for(int i = parent; i >= 0; --i){
HeapAdjust(tree, n, i);
}
}
void HeapSort(int tree[], int n){
HeapBuild(tree, n);
for(int i = n-1; i >=0; --i){
swap(tree[i],tree[0]);
HeapAdjust(tree, i, 0);
}
}
int main(){
int arr[] = {5,1,9,3,7,4,8,6,2};
int n = 9;
HeapSort(arr, n);
for(int i = 0; i < n; i++){
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布