堆排序

来源:互联网 发布:大众奥迪编程 编辑:程序博客网 时间:2024/06/12 21:07
根据严蔚敏老师版本的数据结构一书,实现的代码,经编译成功。
#include<iostream>using namespace std;void HeapSort(int a[],int size);//void HeapAdjust(int a[],int start,int length);void createHeap(int a[],int size);int main(){ int a[10]={71,18,151,138,160 ,63 ,174, 169 ,79 ,78}; for(int i=0;i<10;i++){     cout<<a[i]<<" "; }   cout<<endl; cout<<"After sorting the heap.............."<<endl; HeapSort(a,10); for(int i=0;i<10;i++) {     cout<<a[i]<<" "; }  return 0;  }void HeapAdjust(int a[],int start,int length){   if(length==0){    return;}    int rc=a[start];    for(int i=2*start;i<=(length-1);i=i*2)    {   //找到下面最大的结点        if(i+1<=(length-1)&&a[i]<a[i+1])        {            i++;        }        if(rc>a[i]) break;        a[start]=a[i];start=i;//再从这个点进行堆调整            }    a[start]=rc;}void createHeap(int a[],int size){     for(int i=size/2;i>=0;i--)   {       HeapAdjust(a,i,size);   }}void HeapSort(int a[],int size){    createHeap(a,size);     int tmp;    for(int i=size-1;i>1;i--)    {             tmp=a[0];       a[0]=a[i];       a[i]=tmp;       HeapAdjust(a,0,i);    }    tmp=a[0];     a[0]=a[1];     a[1]=tmp;}

编译的结果如下: