Python 冒泡排序详细解读,史上最详细版,初学者注意 好好读懂每个字。

标题冒泡排序:原理就是重复的进行 两两 元素之间的比较(冒泡的意思就是左右之间的比较元素)

注意错误点 IndexError: list index out of range (列表索引超出范围)
冒泡循环 典型的2层 for 循环 ,for1(最外层) 和 for2(内层循环)。
在冒泡循环中 外层for1 循环的次数代表的 是 列表中 所有数 比较的次数。一般情况为
range(1,len(list1))或者 range(0,len(list1)-1)

在内层循环中 循环次数代表的是 剩余元素之间 两两比较,外层每比较一次,内层就要减少一次,所以
range(0,len(list1)-i) 或者 range(0,len(list1)-i-1)

range()不论内外层 都要做 减一的排序,因为两两 比较最后一个元素 是不用再去比较的

从下面的例子可以看出 range(1,len(list1))与range(0,len(list1)-i) 是一对 for1 for2循环
range(0,len(list1)-i-1)与 range(0,len(list1)-i-1) 也是一对for1(外层) for2(内层)循环

标题冒泡循环的时间复杂度 是 N2

#例子1
sum1= 0 #比较次数
list1 = [4, 4, 5, 6, 7, 8, 3, 5,9]
for i in range(1, len(list1)):		# 注意这里的起始下标为从一开始
    for j in range(0, len(list1) - i):	# 最后一个自己不用和自己比较所以,可以少一次
        sum1 +=1
        if list1[j] > list1[j + 1]:
            list1[j], list1[j + 1] = list1[j + 1], list1[j]
print(list1)
print(sum1)
#例子2
sum = 0
list2 = [45, 4, 6, 5, 9, 7, 8, 3, 45]
for i in range(0, len(list2) - 1):  # 最后一个自己不用和自己比较所以,可以少一次
    for j in range(0, len(list2) - i - 1):	# 每执行一次将本次循环中最大的元素放入对应末尾,所以减去i,少执行对应次数
        sum += 1
        if list2[j] > list2[j + 1]:
            list2[j], list2[j + 1] = list2[j + 1], list2[j]
print(list2)
print(sum)

Python 冒泡排序详细解读,史上最详细版,初学者注意 好好读懂每个字。_第1张图片

你可能感兴趣的:(python)