达标考试中的冒泡算法

2019-11-27  本文已影响0人  食盐_a67e

2019年11月23号星期六的区级达标考试中的冒泡算法,我不会,回来后查询一下方可得知:

冒泡排序(顺序形式),就是从左向右,两两比较,如果左边元素大于右边的,就交换两个元素的位置。

其中每一轮排序,序列中最大的元素浮动到最右面。也就是说,每一轮排序,至少确保有一个元素在正确的位置。

这样接下来的循环,就不需要考虑已经排好的元素了,每次内层循环次数都会-1.

其中,如果有一轮循环之后,次序并没有交换,这时我们就可以停止循环,得到我们想要的有序序列了。

在python3中实现的冒泡算法如下:

先分析原理:例如将 [15,4,23,56,48,72,8]这个数值进行冒泡排序

======第 一 轮:(用 i 表示)======

########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-1=6)#########

先    15     和    4    比较, 交换位置;    #比较1次

        15    和    23    比较,位置不变;     #比较2次

        23    和    56    比较,位置不变;     #比较3次

        56    和    48    比较,交换位置;     #比较4次

        56    和    72    比较,位置不变;     #比较5次

        72    和    8    比较,交换位置;     #比较6次

第一轮之后,数组变成了[4,15,23,48,56,8,72]

======第 二轮:(用 i 表示)======

########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-2=5)#########

由 [4,15,23,48,56,8,72]再开始:

4    和    15    比较,    不变;    #比较1次

15    和    23    比较;    不变;     #比较2次

23    和    48    比较;    不变;     #比较3次

48    和    56    比较;    不变;    #比较4次

56    和    8     比较 ;交换位置;   #比较5次

到目前,数组变成[4,15,23,48,8,56,72]

======第 三 轮:(用 i 表示)======

########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-3=4)#########

由 [4,15,23,48,8,56,72]开始:

4    和    15    比较    结果    不变;     #比较1次

15    和    23    比较    结果    不变;     #比较2次

23    和    48    比较    结果    不变;     #比较3次

48    和    8    比较    结果    交换位置;     #比较4次

到目前,数组变成 [4,15,23,8,48,56,72]

======第 四 轮:(用 i 表示)======

########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-4=3)#########

由 [4,15,23,8,48,56,72]为基础开始:

4    和    15    比较    结果    不变;    #比较1次

15    和    23    比较    结果    不变;    #比较2次

23    和    8    比较    结果    交换位置;    #比较3次

本轮结束,到目前,数组为[4,15,8,23,48,56,72]

======第 五 轮:(用 i 表示)======

########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-5=2)#########

由[4,15,8,23,48,56,72]开始:

4    和    15    比较    不变;    #比较1次

15    和    8    比较    交换位置;    #比较2次

到目前,数组为[4,8,15,23,48,56,72]

======第 六 轮:(用 i 表示)======

########## 数组的长度 - 比较的轮数 = 每一轮中比较的次数=(7-6=1)#########

由[4,8,15,23,48,56,72]开始

4    和    8    比较    结果    不变;  #比较1次

结束,所以最终结果为:[4,8,15,23,48,56,72]

总共进行了六轮比较,每一轮中都是进行了 数组的长度 - 比较的轮数 = 每一轮中比较的次数;

根据上边的分析,得出以下代码:

在python中,我们可以用一下代码实现:

def bubble_sort(num):

    for i in range(len(num) - 1):

        for j  in range(len(num) - 1 - i):

            if  num[j] > num[j + 1]:

                num[j],num[j+1] = num[j+1],num[j]

    return num

print(bubble_sort([15,4,23,56,48,72,8]))

上一篇 下一篇

猜你喜欢

热点阅读