堆排序实现

来源:互联网 发布:中国象棋人机对战软件 编辑:程序博客网 时间:2024/05/17 08:57

今天抽空写了个堆排序的算法,废话不多说,直接上源代码:

#include<iostream>#include<algorithm>#include<functional>using namespace std;#define MAXSIZE 6void print(int a[],int size = MAXSIZE){   int i;for(i=0;i<size;i++)cout<<a[i]<<" ";cout<<endl;}void percolate_down(int a[],int size,int i){int pre,max,lchild,rchild;if(size<=1||i<0||i>size-1) return ;pre=max=i;while(max<size/2){pre=max;lchild = max*2+1;rchild = max*2+2;if(lchild<size&&a[lchild]>a[max]) max = lchild;if(rchild<size&&a[rchild]>a[max]) max = rchild; if(max!=pre)swap(a[max],a[pre]);else break;}}void percolate_up(int a[],int size,int i){  int pre,min,parent;if(size<=1||i<0||i>size-1) return ;pre=min=i;while(min>0){pre=min;parent = (min-1)/2;if(parent>=0&&a[parent]<a[min]) min = parent; if(min!=pre)swap(a[min],a[pre]);else break;}}void pop_heap(int a[],int size){if(size<1) return;int value = a[0];swap(a[0],a[size-1]);percolate_down(a,size-1,0);}void push_heap(int a[],int size){  if(size<1) return;  percolate_up(a,size,size-1);}void make_heap(int a[], int size){  int i;  for(i=size/2;i>=0;i--)  percolate_down(a,size,i);}void sort_heap(int a[], int size){  for(int i=size;i>0;i--)  pop_heap(a,i);}int main(){   int a[MAXSIZE+10]={1,4,5,8,12,14};make_heap(a,MAXSIZE);    print(a,MAXSIZE);//sort_heap(a,MAXSIZE); //   print(a,MAXSIZE);//a[MAXSIZE] = 3;//push_heap(a,MAXSIZE+1);//print(a,MAXSIZE+1);//sort_heap(a,MAXSIZE+1);//print(a,MAXSIZE+1);for(int i=MAXSIZE;i>0;i--){      cout<<a[0]<<" ";  pop_heap(a,i);}cout<<endl;system("pause");return 1;}