python 冒泡排序详解

将列表中的数据使用冒泡排序法进行排序

list=[23,4,5,78,9,6,5,3,0,8,10]

 

详解:

冒泡排序的原理:

1.比较相邻两个元素的大小,如果element1>element2,从小到大排序的话,就将element2和element1进行交换

2.对每一对相邻元素做相同的工作,从开始第一对到最后一对,依次对比的结果,最后一个元素一定是最大的数值

3.所以后续对比过程中,最后一位是不需要再次进行对比,其余的元素遵照以上对比方法

4.持续对比的次数会越来越少,直到没有任何一对元素需要比较

 

例子:

list=[23,4,5,78,9,6,5,3,0,8,10]

该列表总共有11个元素,相邻两个分组,总共能分为10组数据进行对比。

如果第一个元素比第二个元素大,则两个交换位置,第二个元素和第三个元素进行对比,如果第三个比第二个小,则两个交换位置,然后第三个和第四个进行对比......

依次类推,第一次循环完成后,最后一位一定是最大的数值,第二次循环完成后,最后两位是最大的,依次类推,最后得到的就是一个从小到大排序的列表

 

实现的过程讲解:

第一轮对比:4,5,23,9,6,5,3,0,8,10,78  ----->第一位和第二位对比,互换,然后第二位和带三位对比,以此类推,最后一位为最大  (对比10次)

以下是对比的过程详解:

4,23,5,78,9,6,5,3,0,8,10    4,5,23,78,9,6,5,3,0,8,10  4,5,23,78,9,6,5,3,0,8,10   4,5,23,9,78,6,5,3,0,8,10  4,5,23,9,6,78,5,3,0,8,10   4,5,23,9,6,5,78,3,0,8,10

4,5,23,9,6,5,3,78,0,8,10    4,5,23,9,6,5,3,0,78,8,10   4,5,23,9,6,5,3,0,78,8,104,5,23,9,6,5,3,0,8,78,10    4,5,23,9,6,5,3,0,8,10,784,5,23,9,6,5,3,0,78,8,104,5,23,9,6,5,3,0,8,78,10

 

第二轮对比:4,5,9,6,5,3,0,8,10,23,78 --->第一位和第二位对比,互换,然后第二位和带三位对比,以此类推,最后两位依次最大(除去最后两位对比,则需要对比9次)

第三轮对比:4,5,6,5,3,0,8,9,10,23,78 ---->依次类推.........(对比8次)

第四轮对比:4,5,5,3,0,6,8,9,10,23,78  ------>   (对比7次)

第五轮对比:4,5,3,0,5,6,8,9,10,23,78  ------>   (对比6次)

第六轮对比:4,3,0,5,5,6,8,9,10,23,78  ------>   (对比5次)

第七轮对比:3,0,4,5,5,6,8,9,10,23,78   ------>   (对比4次)

第八轮对比:0,3,4,5,5,6,8,9,10,23,78  ------>   (对比3次)

第九轮对比:0,3,4,5,5,6,8,9,10,23,78  ------>   (对比2次)

第十轮对比:0,3,4,5,5,6,8,9,10,23,78  ------>   (对比1次)

 

 

代码实现:

方法一:
list=[23,4,5,78,9,6,5,3,0,8,10]
#此循环是用来设置冒泡排序进行对比的次数,总共11个元素,对比10次,所以i的取值范围为range(len(list)-1)---->0-9,总共是10
for i in range(len(list)-1):
for j in range(i+1,len(list)):#次循环是用来负责列表的下标,从第二个元素开始
if list[i]>list[j]: #如果第一个元素大于第二个元素
element=list[i] #将第一个元素传给一个变量
list[i]=list[j] #将第二个元素的值传给第一个元素
list[j]=element #再将第一个元素的值,传给第二个元素,就完成了两个元素直接的比较和交换
print(list)


方法二:

list=[23,4,5,78,9,6,5,3,0,8,10]
 
for i in range(len(list)-1):
# print("i={}".format(i))
#第二个循环是用来负责列表的下标,
#对比一圈完成后,最后一位一定是最大的数值,所以不用再对最后一位进行对比
#则列表对比的长度就从之前的(len(list)-1)-i,剩下的就是需要对比的数据
for j in range(len(list)-i-1):
# print("j={}".format(j))
if list[j]>list[j+1]:
list[j], list[j + 1] = list[j + 1], list[j]
print(list)
 

   

 

posted @ 2020-08-06 15:44  紫陌红尘雪落无声  阅读(1046)  评论(0)    收藏  举报