简单易懂的冒泡排序

这次介绍的是最简单的冒泡排序.......好了废话不多说先看下面

#先定义一个变量,假设我们要排列下面列表中的元素的顺序

i= [10,4,7,2,1,9,6]

#先分析一下

首先先弄懂冒泡排序,两两相比,第一位比第二位大的话,就相互换位置,.....依次类推,直到最后排完的顺序应该是[1,2,4,6,7,9,10]

先假设第一位和第二位相比较

这边可以用i[0] 跟i[1] ,根据索引获取值,这边都不用多说了哈

第一次:i[0]   跟    i[1]

第二次:i[1]  跟     i[2]

第i次:i[len(i)-2]  跟 i[len(i)-1]    这边是最后第二位和最后第一位相比较

好了,弄懂以上的逻辑,下面开始写代码吧

#定义一个变量
j = 0 while j < len(i)-1: #控制循环,先弄懂整个循环结束的时候,需要比较多少次 if i[j]>i[j+1]: #如果第一位大于第二位的话,执行以下代码 i[j],i[j+1] = i[j+1],i[j] #互换位置 j+=1 #每次循环+1 print(i)

  是不是很简单?你以为这就完事了?错了这只是把最大的那个数循环完了,可以打印看看,现在最大的那个10是不是已经到最后面了?

好了下面开始进一步操作,现在知道上面的代码全部执行完会把最大的那个数放到最后,那现在知道该如何操作了吧?

很简单就是再套个外循环就可以了,那外循环该循环多少次呢?可以根据列表的长度减1来操作就可以了,下面开始操作

i= [10,4,7,2,1,9,6]
a = 0
while a < len(i) - 1:  #控制外层循环
# 定义一个变量
	j = 0
	while j < len(i) - 1:  # 控制内层循环

		if i[j] > i[j + 1]:  # 如果第一位大于第二位的话,执行以下代码

			i[j], i[j + 1] = i[j + 1], i[j]  # 互换位置
		j += 1  # 每次循环+1
	a+=1
print(i)

  

是不是很简单? 其实内部还有很多优化的地方,上面的列表实际其实比较了36次,然而假如我换一个列表呢?

比如列表[1,2,3,8,7,5,4],其实有很多次比较都可以省略的,这样会优化了不少,不然要是用上面的代码,还是一样每次都要比较这么多次数的。

如何优化呢?下次再更新优化后的哈

猜你喜欢

转载自www.cnblogs.com/weiweivip666/p/12907856.html