堆排序算法

来源:互联网 发布:瞻博网络 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]<<" ";}


原创粉丝点击