堆排序实现
2012-11-11 12:32
323 查看
今天抽空写了个堆排序的算法,废话不多说,直接上源代码:
#include<iostream> #include<algorithm> #include<functional> using namespace std; #define MAXSIZE 6 void 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; }
相关文章推荐
- 堆的实现及堆排序
- c++实现堆排序及运行实例结果
- 用仿函数实现大小堆及堆排序
- 内部排序之堆排序的实现详解
- java实现:快速排序,基数排序,计数排序,归并排序,堆排序,希尔排序
- java实现堆排序
- 基本算法-堆排序及其Java实现
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- 堆排序的实现
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- 《算法导论》CLRS算法C++实现(三)P75 堆排序
- 堆排序实现_c++
- [151225] Python3 实现最大堆、堆排序,解决TopK问题
- java实现堆排序
- 排序算法总结(简单选择排序、堆排序)(python实现)
- java实现堆排序的小心得
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- 《算法导论的Java实现》 7 堆排序
- 【数据结构】大小堆的实现及堆排序
- LinuxC/C++编程基础(6) 堆排序的实现