堆排序

来源:互联网 发布:六场预测法 知乎 编辑:程序博客网 时间: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]<<' '; }} 

原创粉丝点击