Python - 冒泡排序
1 冒泡算法
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法,它属于交换排序,主要的方式是通过两辆比较,交换位置,如同水泡咕嘟咕嘟往上冒一样,需要称他为’冒泡排序’。
2 具体的排序方法
它重复地走访过要排序的元素列,依次比较两个相邻的元素,按照一定的顺序(升序/降序)进行比较,如果是升序,那么当右边的数小于左边的数,那么就会进行交换,直到没有相邻的元素需要交换后停止。此时表示该列元素已经排序完成。
3 分析
根据定义,我们知道最少需要两个循环,第一个循环遍历所有元素,内层循环则进行两两比较及换位的操作。
升序分析:
初始列表:[9,1,3,2,6,8,7,4,5]
第一趟,第一次:比较9和1的大小情况,9大于1,需要调换位置[1,9,3,2,6,8,7,4,5]
第一趟,第二次:比较9和3的大小情况,9大于3,需要调换位置[1,3,9,2,6,8,7,4,5]
第一趟,第三次:比较9和2的大小情况,9大于2,需要调换位置[1,3,2,9,6,8,7,4,5]
第一趟,第四次:比较9和6的大小情况,9大于6,需要调换位置[1,3,2,6,9,8,7,4,5]
第一趟,第五次:比较9和8的大小情况,9大于8,需要调换位置[1,3,2,6,8,9,7,4,5]
第一趟,第六次:比较9和7的大小情况,9大于7,需要调换位置[1,3,2,6,8,7,9,4,5]
第一趟,第七次:比较9和4的大小情况,9大于4,需要调换位置[1,3,2,6,8,7,4,9,5]
第一趟,第八次:比较9和5的大小情况,9大于5,需要调换位置[1,3,2,6,8,7,4,5,9]
第一趟确定了一个最大数,放在最右边。接下来在除他以外的未排序空间进行第二趟循环,确认第二大的数放在最油边
第二趟初始列表:[1,3,2,6,8,7,4,5,9]
第二趟,第一次:比较1和3的大小情况,1小于3,不用调换位置[1,3,2,6,8,7,4,5,9]
第二趟,第二次:比较3和2的大小情况,3大于2,需要调换位置[1,2,3,6,8,7,4,5,9]
第二趟,第三次:比较3和6的大小情况,3小于6,不用调换位置[1,2,3,6,8,7,4,5,9]
第二趟,第四次:比较6和8的大小情况,6小于8,不用调换位置[1,2,3,6,8,7,4,5,9]
第二趟,第五次:比较8和7的大小情况,8大于7,需要调换位置[1,2,3,6,7,8,4,5,9]
第二趟,第六次:比较8和4的大小情况,8大于4,需要调换位置[1,2,3,6,7,4,8,5,9]
第二趟,第七次:比较8和5的大小情况,8大于5,需要调换位置[1,2,3,6,7,4,5,8,9]
第二趟找到了第二大的书,放在了第一趟找出的最大数的左边。
4 实现
通过观察可以得知,外层循环每次都可以确定一个最大数,放在最右边,而内层循环,判断的次数是依次减少的,因为上一堂确定的最大数,下一趟就不必再进行对比,根据这个情况编写代码进行排序。
lst = [1,9,3,2,6,8,7,4,5] length = len(lst) for i in range(length): flag = False # 退出开关 for j in range(length - i - 1): if lst[j] > lst[j+1]: flag = True # 如果本次交换了位置,开关位置为关 lst[j], lst[j+1] = lst[j+1], lst[j] if not flag:break # 当开关为开时,表示本次判断没有交换,没有交换,则认为已经排序完毕 print(lst)
5 总结
- 冒泡法需要数据一轮一轮的比较
- 可以设定一个标记判断是否有数据交换发生,如果没有发生交换,可以结束排序,因为此时已经排序完毕了,如果发生了交换,那么就需要继续下一轮排序了
- 最差的排序情况是,出事顺序与目标顺序完全相反,遍历次数1,…n-1之和: n(n-1)/2
- 最好的排序情况是,初始顺序与目标顺序完全相同,遍历次数n-1
- 时间复杂度为O(n**2)
- python3 选择排序、冒泡排序的区别
- Python实现冒泡排序
- python基础编程_32_插入排序,冒泡排序,选择排序
- Python冒泡排序
- 冒泡排序(python实现)
- Python的冒泡排序和插入排序算法
- Python的冒泡排序
- Python冒泡排序
- python实现冒泡排序
- python 冒泡排序
- 冒泡排序-python
- Python3冒泡排序
- 冒泡排序python
- 【代码】Python冒泡排序的实现
- 冒泡排序实现--python
- python实现插入和冒泡排序
- python冒泡排序
- python数据结构与算法----冒泡排序
- 冒泡排序-Python与PHP实现版
- python的最大公约数、最小公倍数和冒泡排序