排序算法分析与归纳
Posted dielianhua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法分析与归纳相关的知识,希望对你有一定的参考价值。
1、冒泡排序
思想示例:相邻元素之间两两比较,小的放前面,大的继续与下一个比较
初始关键字序列: 34 46 23 15 80 67 29 27
(1) 34 23 15 46 67 29 27 [80]
(2) 23 15 34 46 29 27 [67 80]
(3) 15 23 34 29 27 [46 67 80]
(4) 15 23 29 27 [34 46 67 80]
(5) 15 23 27 [29 34 46 67 80]
(6) 15 23 [27 29 34 46 67 80]
(7) 15 [23 27 29 34 46 67 80]
最后排序结果为: 15 23 27 29 34 46 67 80
思想代码:
时间复杂度分析:
最好时间:排序完成,比较时间 -->n - 1移动时间 --> 0 O(n)
最坏时间:倒序排列,比较时间 --> n(n - 1)/ 2 移动时间 --> 3n(n - 1) / 2
O(n²)
空间复杂度分析:内存空间一直在开辟的数组空间内,稳定性好空间复杂度为O(1)
2、直接选择排序
思想示例:每次排序将最小的放在前面,然后将该被替换的数放在最小的数的原位置
初始关键字序列: 34 46 23 15 80 67 29 27
(1) [15] 46 23 34 80 67 29 27
(2) [15 23] 46 34 80 67 29 27
(3) [15 23 27] 34 80 67 29 46
(4) [15 23 27 29] 80 67 34 46
(5) [15 23 27 29 34 ] 67 80 46
(6) [15 23 27 29 34 46] 80 67
(7) [15 23 27 29 34 46 67] 80
最后排序结果为: 15 23 27 29 34 46 67 80
思想代码:
时间复杂度分析:
最好时间:排序完成,比较时间 --> n(n - 1)/2 移动时间 --> 0 O(n²)
最坏时间:倒序排列,比较时间 --> n(n - 1)/ 2 移动时间 --> 3(n - 1) / 2
O(n²)
空间复杂度分析:内存空间一直在开辟的数组空间内,稳定性差空间复杂度为O(1)
3、直接插入排序
思想示例:从初始有序的集合开始,不断把新的数据元素插入其中
初始关键字序列: [34] 46 23 15 80 67 29 27
(1) [34 46] 23 15 80 67 29 27
(2) [23 34 46] 15 80 67 29 27
(3) [15 23 34 46] 80 67 29 27
(4) [15 23 34 46 80] 67 29 27
(5) [15 23 34 46 67 80] 29 27
(6) [15 23 29 34 46 67 80] 27
最后排序结果为: [15 23 27 29 34 46 67 80]
思想代码:
时间复杂度分析:
最好时间:排序完成,比较时间 --> n - 1 移动时间 --> 0 O(n)
最坏时间:倒序排列,比较时间 -->(n - 1)(n + 2)/ 2
移动时间 -->(n - 1)(n + 4)/ 2 O(n²)
空间复杂度分析:内存空间一直在开辟的数组空间内,稳定性好空间复杂度为O(1)
4、快速排序
思想示例:将一个元素作为标准数据元素,分成两部分,左端部分所有元素小于该标准元素,右端部分所有元素大于该标准元素
初始关键字序列: [34 46 23 15 80 67 29 27]
第一趟排序过程: [27 46 23 15 80 67 29 34]
[27 34 23 15 80 67 29 46]
[27 23 34 15 80 67 29 46]
[27 23 15 34 80 67 29 46]
[27 23 15 29 80 67 34 46]
[27 23 15 29 34 67 80 46]
(1) {27 23 15 29} 34 {67 80 46}
(2) {15 23 27 29} 34 {46 67 80}
最后排序结果为: 15 23 27 29 34 46 67 80
思想代码:
5、堆排序
思想示例:将待排序的数组元素集合构成一个完全二叉树结构,每次选择出一个最大(或最小)的数据元素只需比较完全二叉树的数值为高度的次数
初始关键字序列: 34 46 23 15 80 67 29 27
创建最大堆的过程:见笔记(参考资料:http://www.cnblogs.com/MOBIN/p/5374217.html)
思想代码:
以上是关于排序算法分析与归纳的主要内容,如果未能解决你的问题,请参考以下文章