排序算法之冒泡排序
2020-12-13 03:10
标签:style idt 一个 img width 结果 多少 mamicode 函数 一、思路 对一个序列中的元素,比较相邻的元素。如果第一个比第二个大,就交换它们两个,将大的元素放在右边,此时右边就称为有序区,左边就是无序区,不断重复的对左边区域相邻元素进行比较,右边有序区的元素不断增加,最后完成排序。 具体看下面的例子: 这样循环一次叫做一趟(游标不移动到最后一个位置,也就是第四个位置),最后的结果就是选出最大的值在右侧,右侧也就是有序区,然后再进行第二趟、第三趟。 二、实现 分析: i和j都是从0开始取值,当进行第0趟时,j的取值是2,但是使用的range函数,所以右侧取不到,j的范围是(0,3),当进行第1趟时,j的返回是(0,2),一共可以进行(序列的长度-1)趟。 注意: 三、优化 如果冒泡排序中执行一趟而没有进行交换,则序列已经是有序的,可以直接结束算法。 排序算法之冒泡排序 标签:style idt 一个 img width 结果 多少 mamicode 函数 原文地址:https://www.cnblogs.com/shenjianping/p/11068388.html
###range最右侧不取
def bubble_sort(l):
for i in range(len(l)-1): #循环的是趟数 i表示趟数
for j in range(len(l)-i-1): #循环的是游标 j表示的是游标
if l[j]>l[j+1]:
l[j+1],l[j]=l[j],l[j+1] #调换顺序
l=[3,5,2,9]
bubble_sort(l)
print(l) #[2, 3, 5, 9]
###range最右侧不取
def bubble_sort(l):
for i in range(len(l)-1): #循环的是趟数 i表示趟数
exchange=False
for j in range(len(l)-i-1): #循环的是游标 j表示的是游标
if l[j]>l[j+1]:
l[j+1],l[j]=l[j],l[j+1] #调换顺序
exchange=True
if not exchange:
return
l=[3,5,2,9]
bubble_sort(l)
print(l) #[2, 3, 5, 9]