博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序
阅读量:4964 次
发布时间:2019-06-12

本文共 2214 字,大约阅读时间需要 7 分钟。

1         #region 堆排序 2         ///  3         /// array是待调整的堆数组 4         /// i是待调整的数组元素的位置,length是数组的长度 5         ///  6         ///  7         ///  8         ///  9         private static void HeapAdjust(int[] array, int i, int nLength)10         {11             int nChild, nTemp;12 13             for (nTemp = array[i]; 2 * i + 1 < nLength; i = nChild)14             {15                 // 子结点的位置是 父结点位置 * 2 + 116                 nChild = 2 * i + 1;17 18                 // 得到子结点中较大的结点19                 if (nChild != nLength - 1 && array[nChild + 1] > array[nChild])20                     ++nChild;21 22                 // 如果较大的子结点大于父结点那么把较大的子结点往上移动,替换它的父结点23                 if (nTemp < array[nChild])24                 {25                     array[i] = array[nChild];26                 }27                 else    // 否则退出循环28                 {29                     break;30                 }31             }32 33             // 最后把需要调整的元素值放到合适的位置34             array[i] = nTemp;35             ConsoleArray("调整堆排序", array);36         }37 38         /// 39         /// 堆排序算法40         /// 41         /// 42         /// 43         private static void HeapSort(int[] array, int length)44         {45             ConsoleArray("排序前",array);46             // 调整序列的前半部分元素,调整完之后第一个元素是序列的最大的元素47             for (int i = length / 2 - 1; i >= 0; --i)48             {49                 HeapAdjust(array, i, length);50             }51 52             // 从最后一个元素开始对序列进行调整,不断的缩小调整的范围直到第一个元素53             for (int i = length - 1; i > 0; --i)54             {55                 // 把第一个元素和当前的最后一个元素交换,56                 // 保证当前的最后一个位置的元素都是在现在的这个序列之中最大的57                 Swap(array[0], array[i]);58 59                 // 不断缩小调整heap的范围,每一次调整完毕保证第一个元素是当前序列的最大值60                 HeapAdjust(array, 0, i);61             }62 63             //ConsoleArray("堆排序", array);64         }65 66         /// 67         /// 交换函数68         /// 69         /// 元素a70         /// 元素b71         private static void Swap(int a,int b)72         {73             int temp = 0;74             temp = a;75             a = b;76             b = temp;77         }78         #endregion

 

转载于:https://www.cnblogs.com/zhangzhu/archive/2012/12/27/2836155.html

你可能感兴趣的文章
【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)...
查看>>
tomcat+nginx实现
查看>>
大型网站架构系列:分布式消息队列(二)
查看>>
eclipse git解决冲突
查看>>
如何高效的将excel导入sqlserver
查看>>
江西财经大学第一届程序设计竞赛
查看>>
Flex读取txt文件里的内容(一)
查看>>
蓝桥杯——真题训练之李白打酒
查看>>
大话重构连载5:软件改动的四种动机
查看>>
配置完PA13|PA14|PA15|PB3|PB4后,板子不能下载程序了
查看>>
推荐系统实战(二) —— FM
查看>>
LIGHTOJ 1104 Birthday Paradox 概率题 好玩的题
查看>>
mongoDB查询数据
查看>>
DMZ主机
查看>>
leveldb 源码阅读,细节记录memberTable
查看>>
如何从电脑直接控制安卓手机 监控安卓手机 安卓手机如何控制安卓手机
查看>>
百科知识 天气图标示例
查看>>
C#.NET常见问题(FAQ)-方法参数带ref是什么意思
查看>>
javascript判断数据类型
查看>>
SpringMVC GET请求中文数据传递到Server端乱码
查看>>