数据结构所有排序算法性能分析与比较
Posted 璇小姐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构所有排序算法性能分析与比较相关的知识,希望对你有一定的参考价值。
**数据结构所有排序算法性能分析与比较** 转载请标明出处:璇小姐
通过对数据结构的学习,我发现数据结构中各种排序算法的排序方法,过程,以及时间性能,空间性能都比较容易混淆,现就这些情况做如下总结,希望对大家有所帮助。
#### 起泡排序(冒泡排序)
首先取第一个数与第二个数比较,若一大于二,则两数进行交换,若数一小于数二,则将第二个数与第三个数相比较,若数二小于数三,则不交换,若数二大于数三,则将数二与数三交换,以此类推,一直到最后一个数,则冒泡排序==第一趟结束==,此时这个序列的最后一个数就是这个序列的最大值,然后在从这个新序列的第一个数开始,继续比较,若一大于二,则两数进行交换,若数一小于数二,则将第二个数与第三个数相比较,若数二小于数三,则不交换,若数二大于数三,则将数二与数三交换,以此类推,一直到最后一个数,则冒泡排序==第二趟结束==,以此类推,直到此数列有序。
##冒泡排序举例
对数列9 8 5 4 2 0 进行排序
则==第一趟排序==
9 8 5 4 2 0
8 9 5 4 2 0
8 5 9 4 2 0
8 5 4 9 2 0
8 5 4 2 9 0
8 5 4 2 0 9
则==第二趟排序==
8 5 4 2 0 9
5 8 4 2 0 9
5 4 8 2 0 9
5 4 2 8 0 9
5 4 2 0 8 9
以此类推
###直接插入排序
对一个序列进行直接插入排序,从右边第一个数开始依次进行比较,将右边第一个数放在左边,将右边第二个数和左边的数进行比较,若第二个数大,则放在第一个数的右边,若第二个数比第一个数小,则放在第一个数的左边,在取右边序列的第三个数,和左边的两个数进行比较,若比前两个数大,则放在左边序列第三个位置,若比前两个数小,则放在左边序列第一个位置。依次类推,直到结束。
###直接插入排序举例
项目 | Value
-------- | -----
有序 | 待排序
空| 9 3 1 4 2 7 8 6 5
9 | 3 1 4 2 7 8 6 5
3 9 | 1 4 2 7 8 6 5
1 3 9 | 4 2 7 8 6 5
1 3 4 9 | 2 7 8 6 5
1 2 3 4 9 | 7 8 6 5
1 2 3 4 7 9 | 8 6 5
1 2 3 4 7 8 9 | 6 5
1 2 3 4 6 7 8 9 | 5
1 2 3 4 5 6 7 8 9 |
###折半插入排序
对序列4 6 9 12 14 18 23中用折半插入排序算法插入15
n=7 (n+1)/2=4
所以用15和数列中第四个数进行比较,若15比第四个数大,则对数列右边进行折半插入排序,若15比第四个数小,则对数列左边继续进行折半插入排序,依次类推。
4 6 9 ==12== 14 18 23 (15>12)
4 6 9 12 14 ==18== 23 (15<18)
4 6 9 12 ==14== 15 18 23 (15>14)
###希尔排序
对一个序列进行希尔排序,首先看序列要求的增量为多少
增量的计算方法为 increment=(n/3)(向下取整)+1
n为元素个数
计算出增量之后,从数列第一个元素开始,第一个数与与它相隔包括它自身三个元素的元素为一组,第二个元素也与与它相隔包括它自身三个元素的元素为一组,以此类推,然后比较每一小组的大小,若左边大于右边,则交换两个元素位置,否则不交换,然后按照变换后的顺序输出。
###希尔排序举例
21 25 49 25* 16 08
子序列 21 25*
子序列 25 16
子序列 49 08
合成序列21 16 08 25* 25 49
#简单选择排序
对一个序列进行简单选择排序,从一个数列中选择一个最小值与数列第一个数交换位置,此时第一个数为整个数列最小值,该元素已经到达了该序列的最终位置,在从第二个元素开始到最后一个元素,选择其中的最小值,将其与序列第二个元素交换,以此类推。
###简单选择排序举例
初始态49 38 65 97 76 13 27 49
13 【38 65 97 76 49 27 49】
13 27 【65 97 76 49 38 49】
13 27 38 【97 76 49 65 49】
13 27 38 49 【76 97 65 49】
13 27 38 49 49 【97 65 76】
13 27 38 49 49 65 【97 76】
13 27 38 49 49 65 76 【 97】
###快速排序
对一个序列进行快速排序,将序列第一个元素取出作为轴元素,此时序列第一个位置为空,然后从数列最后一个元素开始,和轴元素进行比较,若比轴元素大,则位置前移,将倒数第二个元素与轴元素进行比较,若比轴元素小,则将数存储在第一个空位置上,此时该元素位置为空,然后同时将指向后移,指向第二个元素,以此类推。
###快速排序举例
==6== 1 5 3 2 4
4 1 5 3 2
##基数排序
将所有元素写位一列,然后将所有位对齐,从最低位开始比较,直到最后一位
2 5 4 6
1 5 8 9
3 5 9
==千位比较==
3 5 9
1 5 8 9
2 5 4 6
==百位比较==
3 5 9
1 5 8 9
2 5 4 6
==十位比较==
2 5 4 6
3 5 9
1 5 8 9
==个位比较==
2 5 4 6
3 5 9
1 5 8 9
以上是关于数据结构所有排序算法性能分析与比较的主要内容,如果未能解决你的问题,请参考以下文章