python 冒泡算法

冒泡规则:

  • 每一轮获取第一个数和后面的数据进行依次比较的过程,称为一轮冒泡的过程
  • 每一轮冒泡,都是先拿第一个数,依次比对相领的两个数,如果前一个数比后一个数大,则交换他们的位置,这一轮比较完,会把最大的数放在最后面
  • 然后反复重复上面的步聚(每一轮都能将前面的数据中一个最大数,放到后面),直到一轮冒泡下来没有任何数据需交互位置,此时数据已经为有序状

冒泡的次数:

  • 假设列表的长度为n,冒泡排序是每次拿出来第一个元素,需要拿多少次呢?应该是列表的长度减1,意味着每一个长度为n的列表,需要冒泡n-1次

每次冒泡的比较次数:

  • 第一次冒泡,需要进行依次比较的数为n-次,每一次冒泡,都能排好一个数据的顺序,那么随着冒泡次数的增加排好的数据也会越多,需要比较的数据就越少。

关系图如下:

第几次冒泡                   比较的次数                          
1 n-1
2 n-2
3 n-3
4 n-4

 

 

 

 

 

 

根据以上分析,我们找出了冒泡次数和比较次数的关系,接下来就可以通过找码来实现了

 1 a = [1,5,2,3,8,9]
 2 def func(li):
 3     n = len(li)
 4     # 遍历列表长度减1
 5     for i in range(1,n ):
 6         # 创建一个变量,用来记录本轮冒泡是否有数据交换位置
 7         status = False
 8         # 每次遍历都获取第一个元素,依次和后面的元素进行比较
 9         for j in range(n - i ):
10             # 判断当前元素与后一个元素的值
11             if li[j] > li[j+1]:
12                 # 交换当前元素与后一个元素的值
13                 li[j],li[j+1] = li[j+1],li[j]
14                 # 只要有数据交换位置,则修改status的值
15                 status = True
16         # 每一轮冒泡结束之后,判断当前的status是否为False,如果为False,
17         # 则说明一轮冒泡没有修改任何数据的顺序,即表示列表是有序的,则直接返回,无需重复循环
18         if not status:
19             return li
20 
21     return li
22 
23 print(func(a))

 柠檬班

posted @ 2020-03-12 13:41  python菜鸟的小博客  阅读(1193)  评论(0)    收藏  举报