算法储备之堆排序
2017-10-18 12:25
155 查看
调整堆函数:
堆排序函数:
void HeapSort(int * pArr,int length)
{
int i;
int temp;
for (i = length / 2 - 1;i >= 0;i--) //初始化堆
HeapAdjust(pArr, i, length);
for (i = length - 1;i > 0;i--) //将堆首尾元素交换位置,重新调整[0-length-1]堆结构。
{
temp = pArr[0];
pArr[0] = pArr[i];
pArr[i] = temp;
HeapAdjust(pArr, 0, i);
}
}
void HeapAdjust(int * pArr, int parent, int length) { int temp = pArr[parent]; int child = 2 * parent + 1; while (parent < length / 2) { if (child + 1 < length && pArr[child] < pArr[child + 1]) child++; if (pArr[child] <= temp) break; pArr[parent] = pArr[child]; //调整父子结点之后,可能会对子节点为根的树产生影响,循环调整至满足条件 parent = child; child = 2 * parent + 1; } pArr[parent] = temp; }
堆排序函数:
void HeapSort(int * pArr,int length)
{
int i;
int temp;
for (i = length / 2 - 1;i >= 0;i--) //初始化堆
HeapAdjust(pArr, i, length);
for (i = length - 1;i > 0;i--) //将堆首尾元素交换位置,重新调整[0-length-1]堆结构。
{
temp = pArr[0];
pArr[0] = pArr[i];
pArr[i] = temp;
HeapAdjust(pArr, 0, i);
}
}
相关文章推荐
- 算法储备之Dijkstra算法的各种优化(堆排序、priority_queue、set 优化)
- 算法与数据结构之堆排序
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 算法 排序算法之堆排序
- 浅谈算法和数据结构: 五 优先级队列与堆排序
- 计算机算法--最大堆实现堆排序(从大到小输出)
- 【算法分析】排序算法:希尔、归并、快速、堆排序
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序
- 第十五周 项目一 验证算法 (4)堆排序
- 白话经典算法系列之七 堆与堆排序
- 算法基础之排序篇-堆排序
- 算法基础:排序(四)——二叉堆、优先队列、堆排序——Python实现
- 算法分析-选择排序(直接选择排序 & 堆排序)
- 常用算法总结之排序(六)----堆排序
- 三、算法_堆排序
- 【算法】之堆排序
- 【算法分析】排序算法:希尔、归并、快速、堆排序
- [经典算法] 堆排序
- Java学习资料-Java常用算法-堆排序
- 白话经典算法系列之七 堆与堆排序