堆排序的实现
2013-09-04 20:33
274 查看
/* 堆用数组实现,起始下标为0,故父节点为n时,左孩子为2*n+1,右孩子为2*n+2 */ #define LEN 510000 #include<time.h> #include<algorithm> #include<iostream> void swap(int &a, int& b) { int t = a; a = b; b = t; } //给定一个位置,从这个位置开始调整堆 void build(int num[], int pos, int length) { int left = 2*pos+1;//左孩子的位置 while(left < length) { int right = left+1; int index = left; if(right < length && num[right] > num[left]) { index = right; } if(num[pos] > num[index]) break; swap(num[pos],num[index]); pos = index; left = index*2+1; } } //构建一个大根堆 void buildHeap(int num[], int length) { for(int i = (length-2)/2; i >= 0; i--)//从最后一个非叶子节点开始 build(num, i, length); } //堆排序 void heapSort(int num[], int length) { buildHeap(num, length); //构造堆 while(length > 1) { swap(num[0], num[--length]);//根节点与最后一个叶子节点交换 build(num, 0, length);//交换后可能不是堆了,故调整根节点 } } int main() { int num[LEN]; clock_t start, end; double sortTime; for(int i = 0; i < LEN; i++) { num[i] = rand(); } start = clock(); heapSort(num, LEN); //std::sort(num, num+LEN);//可以和STL的排序比较一下 end = clock(); sortTime = ((double)(end-start))/CLOCKS_PER_SEC; std::cout<<"time:"<< sortTime << std::endl; system("pause"); }
相关文章推荐
- c++实现堆排序--从俺的java版本翻译过来
- 堆排序(C++实现)
- 大数据处理堆实现N个数据找K个最大数据和堆排序
- JS实现堆排序
- c++实现堆排序及运行实例结果
- 堆排序的算法实现
- 堆排序的实现
- 堆排序(java实现)
- c++实现堆排序
- 几种基本排序的实现:选择排序,冒泡排序,插入排序,堆排序,快速排序,归并排序
- 用C++实现堆排序
- 关于堆排序和topK算法的PHP实现
- 数据结构与算是:C++实现堆排序
- HeapSort堆排序Java实现图文代码详解
- 堆排序实现
- 堆排序代码实现
- java实现排序(4)-堆排序
- 堆排序java实现
- C++实现堆、最大堆、最小堆 -- 堆排序插入删除操作
- 堆排序(非递归版)-- c语言实现