堆排序的c++实现

来源:互联网 发布:电脑误删数据恢复 编辑:程序博客网 时间:2024/05/09 22:14
#include<iostream>using namespace std;int a[]={0,5,1,2,4,6,9,7};int maxheap(int a[],int i,int heapsize)//验证堆的正确性 {                                 int left=2*i;            int right=2*i+1;            int largest;            if(heapsize>=left&&a[left]>a[i])            {                   largest=left;            }            else              largest=i;                        if(heapsize>=right&&a[right]>a[largest])            {                  largest=right;            }                        if(largest!=i)            {                  int flag;                  flag=a[largest];                  a[largest]=a[i];                  a[i]=flag;                  maxheap(a,largest,heapsize);            }}int build_max_heap(int a[],int heapsize)//建堆 {                 for(int i = heapsize/2 ; i >=1 ; i-- )         {          maxheap(a,i,heapsize);                  }       }int heapsort(int a[],int heapsize)//堆排序 {    build_max_heap(a,heapsize);    for(int i = heapsize; i >=1 ;i--)    {            swap(a[1],a[i]);                         maxheap(a,1,i-1);    }}int main(){      // build_max_heap(a,8);   int size;   cin>>size;   for(int i=0;i<size;i++)   {           cin>>a[i+1];   }    heapsort(a,size);    for(int i=1;i<size+1;i++)    {            cout<<a[i]<<" ";    }    system("pause");}