堆排序

来源:互联网 发布:iplocation.class.php 编辑:程序博客网 时间:2024/06/05 15:45

快速排序可以用来解决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);}
原创粉丝点击