冒泡算法:对于要排序的序列,每次将两个元素进行比较,如果排序错误则将两者进行交换,直到完成排序。
以数列 li = [12,22,3,11,8,10] 为例: for m in range(len(li)-1): for n in range(m+1,len(li)): if li[m] > li[n]: temp = li[n] li[n] = li[m] li[m] = tempprint li
或
for n in range(1,len(li)-1): for m in range(len(li)-n): num1 = li[m] num2 = li[m + 1] if num1 > num2: temp = li[m] li[m] = num2 li[m + 1] = tempprint li
两者的区别在于,前者从前往后排序,从小的值开始排序,最后排序的是大的值;后者是从后往前排序,从大的值开始排序,最后排序的是小的值
以第二种方法进行详细分解
for m in range(5): num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = num2 li[m+1] = tempprint li
列表一共6个元素,需要比较5次,两两进行比较后,得到新的序列,最大的值排在最后一个。 for m in range(4): num1 = li[m] num2 = li[m+1] if num1 > num2: temp = li[m] li[m] = num2 li[m+1] = tempprint li
再次进行循环,由于最后一个元素已经为最大值,只需要比较前5个,从而得到第二大的值。以此类推,可以发现range中的值从len(li-1)开始依次减1,因此可以再套一层for循环。
for n in range(1,len(li)-1):
#n为1,2,3,4,5
#len(li)-n则为5,4,3,2,1 for m in range(len(li)-n): num1 = li[m] num2 = li[m + 1] if num1 > num2: temp = li[m] li[m] = num2 li[m + 1] = tempprint li
时间: 2024-12-15 06:45:45