堆排序
来源:互联网 发布:六场预测法 知乎 编辑:程序博客网 时间:2024/06/05 23:52
#include <iostream>#include <vector>#include<algorithm>using namespace std;void Max_Heapkey(int a[],int i,int length){ int largest=i;int left =2*i;//i的左结点序列号int right =2*i+1;//i的右结点序列号if(i<=length/2){ if (left<=length&&a[left]>a[largest]){largest = left; } if(right<=length&&a[right]>a[largest]){largest=right; } if (largest != i) {swap(a[i],a[largest]);Max_Heapkey(a,largest,length); } }} void Build_Max_heap(int a[],int length)//建立堆 { for(int i=length/2;i>=1;i--) { Max_Heapkey(a,i,length); } } void HeapSort(int a[],int length)//堆排序 { int i; Build_Max_heap(a,length); for(i=length;i>=1;i--){ swap(a[1],a[i]); Max_Heapkey(a,1,i-1); } } int main() { int a[100]; int length; cout<<"Please Enter the num of numbers:"<<endl; cin>>length; cout<<"Please Enter Some numbers:"<<endl; for(int i=1;i<=length;i++) { cin>>a[i]; } HeapSort(a,length); cout<<"The final :"; for(int i=1;i<=length;i++) { cout<<a[i]<<' '; }}