1、思路:首先,列表每两个相邻得数比较大小,如果前边得比后边得大,那么这两个数就互换位置。就像是水中冒泡一样
2、代码关键点
趟数:n-1趟
无序区: n - 1 - i 【剩余的元素个数】
详解:
n 为列表中元素的个数
首先假设第一个数5(索引为0的数为最大的会先浮出水面)
然后与相邻数(索引比它大的)比较,这里5<7,所以更正假设,这时候认为7会先浮出水面,
然后重复上面的过程,一直到找到最大值9,浮到最上面。
然后计算机再从索引0开始,直到索引(n-1)-1【最大的已经浮出水面了,故无序区范围为n-2】。
n个元素的列表一共需要从索引0开始循环n-1次(每次选出剩余气泡中最大的,最后一个不需要再比较)。
每次循环需要比较的次数是n-1-i(i为大循环次数)===》外循环了几次就表示从无序区拿了几个数,剩下的元素个数还要减去自己,就是剩下要比较的次数了
无序区范围为:n-i -2 因为每次都到无序区倒数第二数,本次循环就比较完了
注:因range取值是前包后不包,为能取到倒数第二个值,所以是n-i-1
有一特殊情况:
就是一次循环下来发现一次交换也没有,说明剩下的气泡已经按顺序排列了,就不需要再循环了。
代码实现:
def bubble_sort(li): for i in range(len(li) - 1): # 表示冒泡排序循环的次数 exchange = False for j in range(len(li) - i - 1): # j为元素索引,表示无序区索引的范围 if li[j] > li[j + 1]: li[j], li[j + 1] = li[j + 1], li[j] exchange = True if not exchange: return return li
原文:https://www.cnblogs.com/sunxiuwen/p/10088969.html