#include<iostream>
using namespace std;
void HeapJudge(int tree[], int s, int m) { //最小堆
int j;
int tmp = tree[s];
for ( j = 2 * s; j <= m; j = j * 2) {
if (j < m && tree[j] > tree[j + 1])
j++;
if (tmp < tree[j])
break;
tree[s] = tree[j];
s = j;
}
tree[s] = tmp;
}
void HeapSort(int tree[],int len) {
for (int i = len / 2; i >= 1; i--) { //建堆
HeapJudge(tree, i, len);
}
for (int j = len; j > 1; j--) {
int tmp;
tmp = tree[1];
tree[1] = tree[j];
tree[j] = tmp;
HeapJudge(tree, 1, j - 1);
}
}
int main() {
int tree[] = { 4,4,10,3,5,1,2 };
int len = 6;
HeapSort(tree, len);
for (int i = 1; i <=len; i++)
cout << tree[i] << ' ';
}
数据结构-排序-堆排序(c++实现)
猜你喜欢
转载自blog.csdn.net/qq_43710881/article/details/105894857
今日推荐
周排行