堆排序算法
来源:互联网 发布:瞻博网络 jerry 编辑:程序博客网 时间:2024/05/16 16:59
//堆排序# include<iostream>using namespace std;void swap(int *p1,int *p2);void Adjust_Max_Heap(int *datas,int pos,int len);void Build_Max_Heap(int *datas,int len);void Heap_Sort(int *datas,int len);void Display(int *datas,int len);void main(){ int datas[10] = {4,1,3,2,16,9,10,14,8,7}; cout<<"初始堆为:"<<endl; Display(datas,10); Heap_Sort(datas,10); cout<<"经过排序后:"<<endl; Display(datas,10);}void swap(int *p1,int *p2)//交换两个数据元素{ int temp; temp=*p1; *p1=*p2; *p2=temp;}void Adjust_Max_Heap(int *datas,int pos,int len)//调整某一节点使其符合最大堆的性质{ int left=2*pos+1,right=2*pos+2; int largest; if(left<len&&datas[left]>datas[pos]) largest=left; else largest=pos; if(right<len&&datas[largest]<datas[right]) largest=right; if(largest!=pos) { swap(&datas[largest],&datas[pos]); Adjust_Max_Heap(datas,largest,len); }}void Build_Max_Heap(int *datas,int len)//建立一个最大堆{ cout<<"建最大堆的情形如下:"<<endl; for(int i=len/2-1;i>=0;i--) { Adjust_Max_Heap(datas,i,len); cout<<endl; Display(datas,len); } cout<<endl;}void Heap_Sort(int *datas,int len)//堆排序过程{ Build_Max_Heap(datas,len); for(int i=len-1;i>=0;i--) { swap(&datas[i],&datas[0]); len=len-1; Adjust_Max_Heap(datas,0,len); }}void Display(int *datas,int len){ for(int i=0;i<len;i++) cout<<datas[i]<<" ";}