用python实现冒泡排序

问题:list1=[12,9,25,37,21,43,19],用冒泡排序对list1进行排序

  • 一、冒泡排序
  • 二、一趟冒泡排序
    • 1、具体代码
    • 2、运行结果
  • 三、冒泡排序完整代码
    • 1、完整代码
    • 2、学习技巧
      • (1)内层循环
      • (2)输出结果
      • (3)外层循环
      • (4)运行结果
  • 四、总结

一、冒泡排序

我会用更通俗的话将冒泡排序的思路解释出来。对于无序的一组数,冒泡排序就是从左到右,相邻的两个数依次比较大小,如果左边大于右边,左右两边的数字交换位置。否则,跳过这个数,从下一位置接着比较。
每一趟冒泡排序都会有一个最大的数被交换到最后的位置,直到所有的数都成了从小到大排列,则排序结束。时间复杂度为O(n²)。

二、一趟冒泡排序

冒泡排序该怎么用具体编码实现呢?首先,先写出第一趟的排序过程。具体看代码:

1、具体代码

list1 = [12,9,25,37,21,43,19]

#指针i开始指向第一个元素list1[0]
#最后指向的是倒数第二个元素list[len(list1)-2],因为i要和i+1进行比较
for i in range(0,len(list1)-1):
    if list1[i] > list1[i+1]:
        #用python交换两数确实很方便
        list1[i],list1[i+1] = list1[i+1],list1[i]

print(list1)

2、运行结果

用python实现冒泡排序_第1张图片
通过第一趟冒泡排序,最大的数43已经被交换到最末尾了。下一趟冒泡排序就是要把次大的数37交换到倒数第二的位置…以此类推。

三、冒泡排序完整代码

完整版的冒泡排序与一趟版的区别是:完整版每趟排序的时候,不需要对末尾已经排好序的数字再进行比较。
因此,完整版需要两层for循环嵌套就可以实现了。要注意循环的范围该怎么设置。

1、完整代码

list1 = [12,9,25,37,21,43,19]

for j in range(len(list1)-1,0,-1): #外层循环以-1的步长循环
    for i in range(0,j): #内层循环的范围就可以改为j
        if list1[i] > list1[i+1]:
            list1[i],list1[i+1] = list1[i+1],list1[i]
print(list1)

2、学习技巧

冒泡排序的编码就终于实现了,但是单看运行结果也看不出来所以然。这里小赵同学教给大家一个小技巧,把最后的输出语句放到内层循环里,这样你就能看到所有数据是怎么交换的了。再者,把最后的输出语句放到外层循环里,这样你就能看到每一趟冒泡排序的结果了。在这里,小赵同学给大家演示一下:

(1)内层循环

list1 = [12,9,25,37,21,43,19]

for j in range(len(list1)-1,0,-1): #外层循环以-1的步长循环
    for i in range(0,j): #内层循环的范围就可以改为j
        if list1[i] > list1[i+1]:
            list1[i],list1[i+1] = list1[i+1],list1[i]
            print(list1) #输出语句在内层循环

(2)输出结果

用python实现冒泡排序_第2张图片

(3)外层循环

list1 = [12,9,25,37,21,43,19]

for j in range(len(list1)-1,0,-1): #外层循环以-1的步长循环
    for i in range(0,j): #内层循环的范围就可以改为j
        if list1[i] > list1[i+1]:
            list1[i],list1[i+1] = list1[i+1],list1[i]
    print(list1) #输出语句在外层循环

(4)运行结果

用python实现冒泡排序_第3张图片

四、总结

以上就是关于冒泡排序的全部内容了大家如果有什么不明白的地方,可以找小赵同学交流讨论哦~~

你可能感兴趣的:(Python的二三事,数据结构,python,排序算法)