堆排序(C#)
来源:互联网 发布:域名被墙 301跳转 编辑:程序博客网 时间:2024/04/30 15:37
堆排序(C#)
(二叉)堆数据结构是一种数组对象,它可以被视为一颗完全二叉树.
完全二叉树(Complete Binary Tree)
若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的节点都连续集中在最左边,这就是完全二叉树。
完全二叉树是由满二叉树而引出来的。对于深度为K的,有N个结点的二叉树,
当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
(完全二叉树)
在堆中对于某一节点i,如果它有左右儿子,则左儿子Left(i)的索引(从0开始)为i*2+1,
右儿子Right(i)的索引为i*2+2,节点i的父节点索引为(i-1)/2.
代码如下:
- /// <summary>
- /// 最小堆排序(升序)
- /// </summary>
- public static int[] MinHeapSort(int[] a)
- {
- // 将数组构建为最小堆
- BulidMinHeap(a);
- int aLenght = a.Length;
- int heapSize = aLenght;
- int[] sorttedArray = new int[a.Length];
- for (int i = 0; i < aLenght; i++)
- {
- // 将根节点的最小值取出
- sorttedArray[i] = a[0];
- a[0] = a[heapSize - 1];
- MinHeapify(a, 0, heapSize--);
- }
- return sorttedArray;
- }
- /// <summary>
- /// 将数组构建为最小堆
- /// </summary>
- public static void BulidMinHeap(int[] a)
- {
- for (int i = a.Length / 2 - 1; i >= 0; i--)
- {
- MinHeapify(a, i, a.Length);
- }
- }
- /// <summary>
- /// 调整二叉堆,即将以i为根节点的二叉树调整为最小堆
- /// </summary>
- public static void MinHeapify(int[] a, int i, int heapSize)
- {
- int left = i * 2 + 1;// 左儿子的索引
- int right = i * 2 + 2;// 右儿子的索引
- int mivValueIndex = i;// 保存最小值的索引
- if (left < heapSize && a[i] > a[left])
- {
- // 左儿子小于当前节点,则记录做儿子的索引,作为最小值索引
- mivValueIndex = left;
- }
- if (right < heapSize && a[mivValueIndex] > a[right])
- {
- // 右儿子小于当前节点,则记录做儿子的索引,作为最小值索引
- mivValueIndex = right;
- }
- if (mivValueIndex != i)
- {
- // 交换根和子节点值
- int temp = a[i];
- a[i] = a[mivValueIndex];
- a[mivValueIndex] = temp;
- // 递归处理子树
- MinHeapify(a, mivValueIndex, heapSize);
- }
- }
0 0
- 堆排序----C语言
- 堆排序(C#)
- 堆排序C语言
- HeapSort(堆排序 C++)
- c 最大堆排序
- c语言堆排序
- 堆排序(C语言版)
- 堆排序(C++)
- 【c++】堆排序算法
- 堆排序(C#)
- 堆排序(C#)
- 堆排序 ----- C语言
- C算法--堆排序
- 堆排序 C语言版
- C语言堆排序
- 堆排序c语言
- 排序算法 - 堆排序 (C++)
- 堆排序(C\C++)
- 用POI导出数据到excel文件
- 数据结构—栈
- php开发日记之生成图片
- 数据分析——数据标准化
- error C4430: 缺少类型说明符 - 假定为 int
- 堆排序(C#)
- iOS 百度地图反编码地理位置信息
- SQLServer 里面的 DDL,DML,DCL,TCL
- freemarker循环遍历Map
- 汕头正宗的牛肉丸多少钱一斤的
- LeetCode---Spiral Matrix II
- Codeforces Round #327 (Div. 1) B题: Chip 'n Dale Rescue Rangers [数学题]
- 库函数strcpy/strlen的工作方式
- 几道笔试题