堆排序 选择排序的升级
来源:互联网 发布:nginx部署java web 编辑:程序博客网 时间:2024/05/21 21:50
选择排序的思想是每次选择未排序列中最小值的下标,使它对应的值与未排序数列中第一个的值交换内容。从而达到选择的目的。
这样就总使未排数列中的最大值放在未排数列的最后一位。
然而怎么确定数列中最大的数呢,如果遍历未排数列 一个一个去比,那显然就是一般的选择排序了
但我们要升级,我们要牛逼,我们要高大上,其实最重要的还是减少操作。
因此引入了堆 或者叫二叉树的方法。
堆的思想是什么呢,抽象点说什么左子树和右子树和 树根的什么关系 2 *i 2*i+1之类的显然不是人话。
那干脆就简单点,实干点。你先把一个数列按大树的形状挨个排下来。自己找找规律看
分叉的左边就是左子树 右边就是右子树 看看下标什么关系,1和2是不是2倍! 1和3是不是2倍+1。
二叉树和排序有什么关系呢?当然有关系!
我们可以看到目前二叉树是完全乱序的,意思就是树根和子树没有大小关系,我们要做的就是调整,调整的目标就是让所有树根都比它的子树们大!这样调整下来的结果就是堆顶,总跟,变为最大的数。这就是我们所要的东西!未排序列中最大的数(或最小的数)。然后让最大数放到堆底最后一个,使堆总长度-1. 反复循环这一步,那不就全部有序了吗?
以下是代码:
10万个随机数据测试:
时间复杂度均为 O(nlog2n)
稳定性是不稳定的。一旦一层数字调整了发生了向上交换,那就跳跃式交换数据了,无法保证相同的值的位置关系
阅读全文
0 0
- 堆排序 选择排序的升级
- 选择排序--堆排序
- 选择排序:堆排序
- 选择排序-堆排序
- 选择排序-【堆排序】
- 【选择排序】堆排序
- 选择排序 堆排序
- 选择排序-堆排序
- 选择排序---堆排序
- 选择排序&&堆排序
- 选择排序&堆排序
- 排序-->选择排序(选择排序&&堆排序)
- 排序 - [选择排序 - 堆排序]
- 堆排序(改良的选择排序)
- 21 改良的选择排序--堆排序
- 堆排序和选择排序的比较
- 选择排序:直接选择排序 堆排序
- 选择排序:直接选择排序,堆排序
- Slim Span UVA
- django开发(6)配置url
- 希尔排序 插入排序的升级
- android的几种数据存储方式
- 洛谷 P2756 飞行员配对方案问题
- 堆排序 选择排序的升级
- 如何提高前端工作效率?
- c语言 快速排序
- Java继承个人的理解
- 数据结构实验之链表四:有序链表的归并
- 程序员和项目经理驰骋职场秘籍
- Arctic Network UVA
- 快速排序 常考排序算法
- sycsec的一道审计题目