【排序算法】之堆排序的实现
2015-12-10 16:21
239 查看
#include<iostream> using namespace std; /* 1:找到第一个非叶子节点的位置cur:数组元素个数size/2-1 2:从cur开始,依次将各子树调整为最大堆--->整体成为最大堆 3:堆顶元素与数组最后一个元素交换 4:数组元素减1,重复执行上述操作 */ void AdjustUp(int *arr, int size) { int cur = size / 2 - 1;//指向第一个非叶子节点 while (cur >= 0) { int left = cur * 2 + 1;//该节点的左孩子 int max = left; int right = left + 1; //该节点的右孩子 //求出左右孩子中较大的节点 if (right < size&&arr[right] > arr[max]) { max = right; } //左右孩子中较大的节点,与根节点比较,根节存放较大值 if (arr[max] > arr[cur]) { swap(arr[max], arr[cur]); } //为下一颗树调整做准备 cur--; } } void HeapSort(int *arr, int size) { for (int i = size; i > 1; --i) { AdjustUp(arr, i);//调整为最大堆 swap(arr[0], arr[i - 1]); //1:将堆顶元素与数组最后一个元素交换 //2:然后堆元素个数减1,重新调整为最大堆,重复1操作 } } void Print(int *arr, int size) { for (int i = 0; i < size; ++i) { cout << arr[i] << " "; } cout << endl; } int main() { int arr[] = { 2, 9, 7, 15, 8, 21, 12, 100, 99 }; int size = sizeof(arr) / sizeof(arr[0]); HeapSort(arr, size); Print(arr, size); system("pause"); return 0; }
相关文章推荐
- JavaScript演示排序算法
- 堆排序
- C#堆排序实现方法
- 算法之排序算法的算法思想和使用场景总结
- php 地区分类排序算法
- js三种排序算法分享
- Javascript中的常见排序算法
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
- 排序算法的javascript实现与讲解(99js手记)
- C++中十种内部排序算法的比较分析
- Java实现几种常见排序算法代码
- php堆排序实现原理与应用方法
- 浅谈javascript实现八大排序
- PHP常用的排序和查找算法
- JavaScript中九种常用排序算法
- C++堆排序算法的实现方法
- STl中的排序算法详细解析
- 深入理解堆排序及其分析
- C语言对堆排序一个算法思路和实现代码
- 算法学习入门之使用C语言实现各大基本的排序算法