冒泡排序算法与改进的冒泡排序算法

发布于:2023-01-20 ⋅ 阅读:(15) ⋅ 点赞:(0) ⋅ 评论:(0)

活动地址CSDN21天学习挑战赛

目录

一、冒泡排序原理

二、冒泡排序流程  

三、实例

四、冒泡排序的改进

五、改进的冒泡排序时间性能分析

一、冒泡排序原理

    对存放在数组的数据,按从前往后的方向进行多次扫描,当发现两个相邻的数据排序与要求的排序不相符时交换这两个数的位置,以从小到大的排序要求为例,这样较小的数据就会冒上来(称为冒泡排序)。

二、冒泡排序流程

 1、流程:

    原始序列: 2   1    0   12    8   6   9   4

i=0  第一趟排序:1   0    2     8    6    9   4   12     比较次数:7次

i=1 第二趟排序: 0   1    2     6    8    4   9   12     比较次数:6次

i=2 第三趟排序:   0    1   2     6    4     8   9   12     比较次数:5次

i=3 第四趟排序:   0    1   2     4     6    8   9   12     比较次数:4次

i=4 第五趟排序:0    1   2     4     6    8   9   12     比较次数:3次

i=5 第六趟排序:  0    1   2     4     6    8   9   12       比较次数:2次

i=6 第七趟排序:  0    1   2     4     6    8   9   12       比较次数:1次

2、思考:

总共进行几趟排序、比较次数怎么表示?

1)总共进行n-1趟排序;(数组中共有n个数)

2)第一趟排序后最大的数“沉底”,第二趟排序数组中次大的数“沉底”..........;每趟排序都会减少一个待排序的数,所以比较次数为n-i-1。(数组中共有n个数)

三、实例

    已知数组a[8]={ 2   1    0   12    8   6   9   4};使用冒泡排序按从小到大顺序输出,并输出每趟排序后的结果

1、代码:

  

2、运行结果:

四、冒泡排序的改进

1、改进冒泡算法的说明:

从举例的结果可以看出,在进行完第四次排序后已经有序,所以不必继续进行下面的排序(继续进行排序,只进行数值的比较而数据不会移动)。改进的冒泡排序算法性能更好。

2、改进的冒泡排序代码:

3、运行结果 :

 

从运行结果得到,排序只进行了四趟(第四趟排序结束后,数组中的数据元素已经有序)

 五、改进的冒泡排序时间性能分析

 最好情况(正序)  例如: 1 2 3 4 5

 比较次数:n-1次

 移动次数:0

 时间复杂度:O(n)

 最坏情况(逆序) 例如:  5 4 3 2 1

 比较次数:n*(n-1)/2

 时间复杂度:O(n^2)

 移动次数:3*n*(n-1)/2