详解冒泡排序及Python3代码实现
来源:互联网 发布:c语言 void main 编辑:程序博客网 时间:2024/05/17 22:23
下面详细介绍冒泡排序的思想以及python3代码实现。
首先是这样一个常识:在水中两个相同深度的气泡,大的气泡上浮的快,最先上浮到水面。
然后假设有一个列表保存着一组数据,如下所示:左端为里表中的元素,右端为索引。
为什么要竖着放,这样可以给你‘冒泡’的感觉。当然我们很容易看出来8是最大的会最先浮出水面,但是计算机不会想我们这样‘看’。它只会一步步来,首先假设第一个数(索引为0的数为最大的会先浮出水面),然后与相邻的数(索引比它大的)比较。这里发现8>2,所以更正假设:这时候认为8是会最先浮出水面的,然后与相邻的交大索引的数比较,发现4<8,也就是说上面的4应该会晚于8浮出水面,这时候就需要交换位置,从上到下是7,3,8,4,2。这时候计算机仍然认为8是上浮最快的,然后依次与4和2比较,并且交换位置,交换完后从上到下的顺序为8,7,3,4,2. 这时候计算机找到了最大的那个气泡8.并认为最先浮出水面(然后只需要比较剩下的气泡谁先浮出水面即可)。然后计算机再从索引0开始,直到n-2(最大的已经浮出水面)。n个元素的列表一共需要从索引0开始循环n-1次(每次选出剩余气泡中最大的,最后一个不需要再比较),每次循环需要比较的次数是n-1-i(i为大循环次数)。这里有一点可以优化的地方:就是一次循环下来发现一次交换也没有,说明剩下的气泡已经按顺序排列了,就不需要再循环了。详细代码如下:
__author__ = "Allen Liu"__time__ = "2017/8/13"'''This program used to '''import random# 定义冒泡排序函数def bubble_sort(data): for i in range(len(data) - 1):# 外循环每一次使得有序的数增加一个 indicator = False # 用于优化(没有交换时表示已经有序,结束循环) for j in range(len(data) - 1 - i):#内循环每次讲无序部分中的最大值放到最上面 if data[j] > data[j + 1]: data[j], data[j+1] = data[j+1], data[j] indicator = True if not indicator:#如果没有交换说明列表已经有序,结束循环 break# 验证算法正确性data = list(range(10))#产生一个有序列表random.shuffle(data) # 调用shuffle函数打乱顺序print(data)# 排序前bubble_sort(data)# 调用冒泡排序算法print(data)#排序后
阅读全文
1 0
- 详解冒泡排序及Python3代码实现
- 冒泡排序原理及代码实现
- 冒泡排序(解析及代码实现)
- 冒泡排序及java代码实现
- 冒泡排序代码详解
- python3实现冒泡排序和插入排序
- 冒泡排序代码实现
- 冒泡排序代码实现
- 选择排序,冒泡排序及二分查找的代码实现
- 数据结构 - 冒泡排序(Bubble Sort) 详解 及 代码(C++)
- C语言冒泡排序法分析及代码实现
- C语言冒泡排序法分析及代码实现
- 简单选择、冒泡、插入排序思想及Java实现代码
- 冒泡排序及C++/java代码实现(BubbleSort)
- Java冒泡排序代码详解
- 冒泡排序算法 Java 实现过程及详解
- 冒泡排序-JS代码实现
- 冒泡排序的实现代码
- Zabbix使用微信发送告警(附上Python代码)
- 【CodeForces】837C
- 欢迎使用CSDN-markdown编辑器
- Android与H5交互,数据不同步
- svn is already locked
- 详解冒泡排序及Python3代码实现
- VBMSFlexGrid控件选择并传值
- 2141数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- java基础学习总结——基础语法2
- C#快速开发PictureBox 图像控件
- 浅谈游戏中BOSS设计的思路
- 桶排序在海量数据中的应用
- X509证书--ANS1结构
- 区间第k小 分块