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))
柠檬班

浙公网安备 33010602011771号