堆排序 合并排序 快速排序 简单比较
来源:互联网 发布:mastercam9.1编程全集 编辑:程序博客网 时间:2024/06/05 10:26
堆排序
1. 堆排序是构造一颗完全二叉树
2. 堆有最大堆与最小堆两种
3. 保持堆性质操作
当i的Left(i)和 Right(i)都是最大堆,这时i可能小于其子女,调用保持堆性质操作,让A[i]下降使得以i为根的子树保持最大堆
4. 建堆操作
一个数组作为输入,先构建一个完全二叉树。这棵树一般不会满足最大堆性质。从i/2的节点位置开始,向前(i/2, i/2-1, i/2-2……)调用保持最大堆性质操作。最后将得到一个最大堆。
5. 堆排序操作
最大堆构建完成后。因为数组中最大元素在根A[1],则通过把它与A[n]互换来达到。现在,从堆中“去掉”节点n(输出n节点的值),然后对A[1…n-1]构建最大堆。因为原来根的子女仍是最大堆,所以可能新的根元素违反了最大堆性质,则只用对新的根元素调用一次保持堆性质操作,就能得到新的最大堆。
然后再次重复刚才的操作,即可实现堆排序。
合并排序
合并排序由MERGE-SORT和MERGE两个子程序组成。
MERGE-SORT(A,p,r)
If p < r
The q <- [ (p+r)/2 ]取下整数
MERGE-SORT(A, p, q)
MERGE-SORT(A,q+1,r)
MERGE(A,p,q,r)
合并排序由底向上进行排序。MERGE函数需要开辟新的存储空间来保存两个待合并的有序数组。
合并排序是由底向上是因为其先递归调用MERGE-SORT,然后在不可在分解的时候(或则人为不让再分解时)调用MERGE子程序。
合并排序可以将MERGE子程序替换掉,在将待排序空间划分到一个较小规模时,可以利用插入排序等其他排序方法。
快速排序
快速排序也由两个部分组成,QUICKSORT和PARTITION。
QUICKSORT(A,p,r)
If p<r
Then q <- PARTITION(A,p,r)
QUICKSORT(A,p,q-1)
QUICKSORT(A,q+1,r)
快速排序的关键是PARTITION,它将数组进行就地重新排列,以一个数为划分,左边的数组保存比它小的数,右边的数组保存比它大的数。然后递归对左右数组再次调用QUICKSORT。
快速排序是由上之下的排序算法,先进行顶层的排序,然后再递归调用左右部分进行排序。
快速排序的PARTITION子程序不可替换成其它子程序,因为它必须实现将数组划分为左右两个部分的逻辑。
- 堆排序 合并排序 快速排序 简单比较
- 快速排序、堆排序、归并排序简单比较
- 冒泡排序,快速排序,堆排序比较
- 冒泡排序,快速排序,堆排序比较
- 插入排序、合并排序、堆排序和快速排序
- 堆排序与快速排序效率比较
- 6种排序算法及其比较 简单选择排序,堆排序,简单插入排序,希尔排序,冒泡排序,快速排序,归并排序
- 快速排序/堆排序
- 比较排序之堆排序和快速排序
- 插入排序、冒泡排序、选择排序、快速排序、堆排序、归并排序算法比较
- 插入排序,合并排序,堆排序,快速排序,计数排序的实现(算法导论)
- 算法有插入排序,堆排序,合并排序,快速排序和stooge排序
- 排序:简单排序-堆
- 合并排序及堆排序
- 【更新】排序算法比较:插入排序,冒泡排序,归并排序,堆排序,快速排序,计数排序,基数排序,桶排序
- 比较排序总结——直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序
- 快速排序-堆排序-STL中的堆排序-归并排序 》时间比较
- 随机生成30个数,试比较直接插入排序、简单选择排序、冒泡排序、快速排序、堆排序和希尔排序的时空性能和稳定性。
- aspnetpager分页的用法
- 网卡DM9000的驱动移植
- 控制台输出表格示例
- 【叶子函数分享三十二】求某段时间内星期几的天数
- 天涯文章下载器
- 堆排序 合并排序 快速排序 简单比较
- 【叶子函数分享三十三】根据进舍位或四舍五入来求值
- 写在开始
- [vc]让你的控制台程序也支持自动补齐
- 从终端输入中统计数字,空白符,其他字符出现次数
- dedecms二次开发之数据库类详解
- 交通灯管理系统
- Lucene搜索引擎开发权威经典 第14章 WEB搜索引擎开发实例 部署
- Flex 4中组件背景设置(填充方式)group为例子