您的位置:首页 > 其它

堆排序

2017-09-24 17:19 120 查看
#include<iostream>
using namespace std;
//升序建立最大堆;降序建立最小堆
void heapadjust(int arr[], int start, int end) {
int tmp = arr[start];
//根结点从0开始,所以i结点的左右孩子结点的下标为2i+1和2i+2
for (int i = 2 * start + 1; i <= end; i = 2 * i) {
if (i < end&&arr[i] < arr[i + 1]) i++;
if (arr[start] > arr[i]) break;
else {
arr[start] = arr[i];
start = i;
}
}
arr[start] = tmp;

}
/*
void heapadjust(int arr[], int pos, int len) {
int tmp,child;
//根结点从0开始,所以i结点的左右孩子结点的下标为2i+1和2i+2
for (temp=arr[pos];2*pos+1<=len;pos=child) {
child=2*pos+1;
if (child < end&&arr[child] < arr[child + 1]){
child++;
}
if (arr[pos] < arr[child]) arr[pos] = arr[child];
else   break;
}
arr[pos] = tmp;

}
*/
void heapsort(int arr[], int len) {
for (int i = len / 2-1; i >= 0; i--) {
heapadjust(arr, i, len-1);
}
for (int i = len - 1; i >= 0; i--) {
int tmp = arr[i];
arr[i] = arr[0];
arr[0] = tmp;
heapadjust(arr, 0, i - 1);
}
}

int main() {
int arr[] = { 5,4,9,8,7,6,0,1,3,2 };
int len = sizeof(arr) / sizeof(arr[0]);
heapsort(arr, len);
for (int i = 0; i < len; i++) {
cout << arr[i] << ' ';
}
cout << endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  堆排序