堆排序
来源:互联网 发布:sql 表中复制数据 编辑:程序博客网 时间:2024/06/02 22:28
堆排序(Heap Sort)
1991年的计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了著名的堆排序算法( Heap Sort )
它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素,对应的是完全二叉树,堆分为大顶堆和小顶堆。
对于堆的详细概念,可见博文堆的实现以及优先级队列
堆的构建:
利用数组下标之间的关系,将数组想象称为一个完全二叉树,如下图:
下面以升序为例:
如果要对待排序列进行升序排列,需要建立一个大堆,每次从堆顶拿出最大的记录,放在数组的最后一个位置,然后在进行一次调整堆,然后重复执行直到整个序列有序。
void AdJustDown(int* array,int root,int size){ int parent = root; int child = (root << 1)+1; while(child < size) { if(child + 1 < size && array[child + 1] > array[child])//默认让两个孩子中较大的作为右结点 ++child; if(array[child] > array[parent]) { //如果child大于parent,就进行交换 swap(array[child],array[parent]); parent = child;//被调下来的父节点再次和自己的孩子比较 child = (child << 1) + 1; } else { break; } }}void HeapSort(int* array,int size){ for(int root = ((size - 2)>>1);root>=0;--root) { AdJustDown(array,root,size); } //每次选出最大的,放在N-1的位置上 int end - size - 1; while(end) { swap(array[0],array[end]); AdJustDown(array,0,end); --end; }}
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 萌新入行-数据上传
- Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目
- Spring面试题
- 线程调度--分时调度模型和抢占式调度模型
- 去掉thymeleaf 模板使用'$'符号进行后台变量取值时显示的红色波浪线
- 堆排序
- /10个值得推荐的学习编程的网站 世界已经进入了互联网的时代。据最近发布的一篇《2016年互联网趋势》报告显示,中国已成为互联网市场的领导者,中国互联网用户的数量达到了6.68亿。可以预见,有
- Java数据类型
- hibernate关于@Id位置不正确导致的系统启动出错的问题
- 商品SKU数据库设计
- idea部署项目的时候需要注意
- 实验二 逻辑斯蒂回归
- eclipse中使用git
- 设计模式百题大全