堆排序

#include<iostream>
#include<algorithm>
#include<ctime>
#include<cstdlib>
using namespace std;
void maxHeap(int *a,int n,int i){
    int left=i<<1,right=i<<1|1;
    if(left > n) return;
    int large=left;
    if(right <= n && a[right] > a[large]) large=right;
    if(a[i] < a[large]) swap(a[i],a[large]);
    maxHeap(a,n,large);
}
void makeHeap(int * a,int n){
    int i;
    for(i=n/2;i>=1;i--){
        maxHeap(a,n,i);
    }
}
void sortHeap(int * a,int n){
    int i;
    for(i=n;i>=2;i--){
        swap(a[i],a[1]);
        maxHeap(a,i-1,1);
    }
}
int main(){
    srand(time(NULL));
    int i,a[11];
    for(i=1;i<=10;i++){
        a[i]=rand()%20;
    }
    makeHeap(a,10);
    sortHeap(a,10);
    for(i=1;i<=10;i++){
        cout<<a[i]<<' ';
    }
    cout<<endl;
    ////////////////////
    for(i=1;i<=10;i++){
        a[i]=rand()%20;
    }
    make_heap(a+1,a+11);
    sort_heap(a+1,a+11);
    for(i=1;i<=10;i++){
        cout<<a[i]<<' ';
    }
    cout<<endl;
    return 0;
}

 

posted @ 2012-12-09 09:18  sumaoqing123  阅读(148)  评论(0编辑  收藏  举报