堆排序
2017-03-06 18:06
134 查看
#include <stdio.h> #define LARGE 1 // 构建大堆,大堆排序后是 从小到大 #define SMALL 0 // 构建小堆,小堆排序后是 从大到小 #define LEN 11 #define RLEN 10 int arr[LEN]; // arr[0] 不使用,坐标从1开始 void adjust(int *arr,int s,int len) { int tmp,j; tmp = arr[s]; for(j=2*s; j<=len; j*=2) { #if SMALL if(j<len && arr[j] < arr[j+1]) // 构建大堆 j++; if(!(tmp < arr[j])) break; #else if(j<len && arr[j] > arr[j+1]) // 构建小堆 j++; if(!(tmp > arr[j])) break; #endif arr[s] = arr[j]; s = j; } arr[s] = tmp; } void heapsort(int *arr,int len) { int i,tmp; for(i=len/2; i>0; i--) { adjust(arr,i,len); } for(i=len; i>1; --i) { tmp = arr[1]; arr[1] = arr[i]; arr[i] = tmp; adjust(arr,1,i-1); } } int main(void) { int i; for(i=1;i<LEN;i++) { scanf("%d",arr+i); } heapsort(arr,RLEN); putchar('\n'); for(i=1;i<LEN;i++) { printf("%3d",arr[i]); } putchar('\n'); return 0; }
相关文章推荐
- 数据结构排序算法之堆排序(c语言实现)
- 归并排序、堆排序、快速排序
- JavaScript数据结构之 堆排序
- 数据结构-堆排序和优先队列
- 排序算法七:选择排序之堆排序
- 深入浅出理解排序算法之-堆排序
- [数据结构] 二叉堆,堆排序,优先级队列
- 《算法导论》第6章 堆排序 个人笔记
- 优先队列和堆排序(转)
- 最大堆排序
- 优先队列和堆排序
- Go语言用堆排序的方法进行一千万个int随机数排序.
- c++实现最大堆建立(链表结构)和堆排序
- 排序算法(七)——堆排序
- 04_程序员必须掌握的8大排序算法_堆排序
- LeetCode OJ 215. Kth Largest Element in an Array 堆排序求解
- 选择排序----直接选择排序与堆排序
- 【面经笔记】堆排序与topk问题
- 堆排序
- 【每日算法】堆排序