您的位置:首页 > 其它

堆排序

2017-11-22 23:19 169 查看
快速排序可以用来解决top(n)问题,堆排序用来解决有序的top(n)问题

- //堆排序:建堆,删除:向下调整,小的下沉,下沉到底

// 插入:向上调整,大的上浮,上浮到顶

//折半插入排序
#include<iostream>
using namespace std;
void swap(int a[], int i, int j){  //交换
int c = a[i];
a[i] = a[j];
a[j] = c;
}
void adjustDown(int a[], int k, int len){//大顶堆,向下调整,小的下沉到底
a[0] = a[k];
for (int i = 2*k; i <= len; i = i * 2){
if (i < len&&a[i + 1]>a[i])
i++;
if (a[k] < a[i]){
swap(a,i,k);
k = i;
}
}
}
void buildMaxHeap(int a[], int len){ //a[]是从1开始
for (int i = len / 2; i > 0; i--){
adjustDown(a, i, len);
}

}
void dsort(int a[], int len){
buildMaxHeap(a, 9);
for (int i=9; i > 1; i--){
swap(a, 1, i);
adjustDown(a, 1, i-1);
}
for (int i = 1; i <= len; i++)
cout << a[i] << endl;
}
int main(){
int a[] = { 0, 9,8,7,6,5,4,3,2,1 };
dsort(a, 9);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: