选择排序之----堆排序
2011-12-07 18:27
211 查看
堆排序是简单选择排序的改进,是一种不稳定的排序方法。
基本思路:对一组待排序的记录序列,先将其关键字按堆的定义排列一个序列(称为初建堆),找到最小(最大)关键字后,将其取出。用剩余的n-1个元素再重建堆,便可得到次小(次大)值。如此反复执行,直到全部关键字排好序为止。
基本思路:对一组待排序的记录序列,先将其关键字按堆的定义排列一个序列(称为初建堆),找到最小(最大)关键字后,将其取出。用剩余的n-1个元素再重建堆,便可得到次小(次大)值。如此反复执行,直到全部关键字排好序为止。
#include<stdio.h> #define Type int #define MARK 0 //占据a[0],不起实际作用 #define NUM 6 #define Num NUM - 1 //实际要排序的数 void print(Type A[]) { int i; for(i = 1; i< NUM; i++) printf("%d ", A[i]); printf("\n"); } void adjust(Type *buf, int t,int w) { int i,j; Type x; i = t; x = buf[i]; //待筛选的值存放在辅助单元中 j = 2*i ; //buf[j] 是buf[i]的左孩子 while(j<=w) //确定不越界 { if((j < w)&&(buf[j] > buf[j + 1])) //若存在右子树且右子树的关键值小,则从右分支筛选, j++; //否则从左子树筛选 if(x > buf[j]) //若待筛选的值大于子树的值 { buf[i] = buf[j]; //进行对调 i = j; j = 2*j; //继续搜索 } else { break; //根不大于他的孩子的值,调整完毕,退出循环 } } buf[i] = x; //将待排序的值放入恰当的位置 } void heap_sort(Type *buf, int n) { int i; Type x; for(i = n/2;i >= 0; i--) //初建堆 adjust(buf, i, n); //初始化堆的输出 printf("初始化堆的输出:"); print(buf); for(i = n; i > 1; i--) //进行n-1趟排序 { x = buf[1]; //将第一个记录和当前堆中最后一个记录互换 buf[1] = buf[i]; buf[i] = x; adjust(buf,1,i-1); //已经筛选buf[1]结点,得到具有n-1个结点的堆。 //重建堆的输出 printf("第%2d次重建堆的输出:",(NUM - i)); print(buf); } } int main() { Type num[NUM] = {MARK,1,32,2,12,23}; printf("Original array:"); print(num); heap_sort(num,Num); //Num = NUM - 1 printf("Sorted array:"); print(num); return 0; }
相关文章推荐
- 排序算法2--简单选择排序、堆排序
- 选择排序之堆排序
- 常用的排序算法:冒泡,简单选择,直接插入,快速排序,堆排序
- 9.选择排序——堆排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- 排序 - [选择排序 - 堆排序]
- 2 -- 选择排序之堆排序
- 经典排序算法设计与分析(插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序、归并排序)
- 面试珠玑 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 第十五周项目1 验证算法(5)选择排序之堆排序
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- 选择 冒泡 插入 快排 堆排序 排序
- 【算法拾遗(java描述)】--- 选择排序(直接选择排序、堆排序)
- 九大排序算法及其实现- 插入.冒泡.选择.归并.快速.堆排序.计数.基数.桶排序.堆排序
- 排序算法七:选择排序之堆排序
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- 8.2 内部排序法---选择类排序(简单选择、堆排序)
- 数据结构与算法从零开始系列:冒泡排序、选择排序、插入排序、希尔排序、堆排序、快速排序、归并排序、基数排序