当前位置:编程学习 > C/C++ >>

堆排序

#include<iostream>  
using namespace std;  
  
void adjustHeap(int a[], int n, int id)//{  
    int Min;  
    while(2*id+1<n){  
        Min=2*id+1;  
        if(2*id+2<n){  
            if(a[2*id+1] > a[id*2+2]){  
                Min=id*2+2;  
            }  
        }  
        if(a[id]<a[Min]){  
            break;  
        }else{  
            swap(a[id],a[Min]);  
            id=Min;  
        }  
    }  
}  
void buildHeap(int a[], int n)/*建立小顶堆*/{  
    for(int i = n /2 -1; i >= 0; i--) {  
        adjustHeap(a,n,i);  
    }  
}  
void HeapSort(int a[],int n){  
    buildHeap(a,n);  
    for(int i=n-1;i>=0;i--){  
            swap(a[0],a[i]);  
                n--;  
        adjustHeap(a,n,0);  
    }  
  
}  
int main(){  
  int a[12];  
  while(1){  
    int nn;  
    cin>>nn;  
    for(int i=0;i<nn;i++){  
  
        cin>>a[i];  
    }  
    HeapSort(a,nn);  
    for(int i=0;i<nn;i++){  
        cout<<a[i]<<"  ";  
    }  
    cout<<endl;  
  }  
 return 0;  
}  

 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,