排序:冒泡排序与选择排序
冒泡排序
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序算法的运作如下:
- 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡排序的分析
def bubble_sort(alist):for j in range(len(alist)-1,0,-1):# j表示每次遍历需要比较的次数,是逐渐减小的for i in range(j):if alist[i] > alist[i+1]:alist[i], alist[i+1] = alist[i+1], alist[i]li = [54,26,93,17,77,31,44,55,20]
bubble_sort(li)
print(li)
时间复杂度
- 最优时间复杂度:O(n)
- 最坏时间复杂度:O(n2)
- 稳定性:稳定
选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
选择排序分析
def selection_sort(alist):n = len(alist)# 需要进行n-1次选择操作for i in range(n-1):# 记录最小位置min_index = i# 从i+1位置到末尾选择出最小数据for j in range(i+1, n):if alist[j] < alist[min_index]:min_index = j# 如果选择出的数据不在正确位置,进行交换if min_index != i:alist[i], alist[min_index] = alist[min_index], alist[i]alist = [54,226,93,17,77,31,44,55,20]
selection_sort(alist)
print(alist)
时间复杂度
- 最优时间复杂度:O(n2)
- 最坏时间复杂度:O(n2)
- 稳定性:不稳定
排序:冒泡排序与选择排序相关推荐
- 简单排序——冒泡排序,选择排序,插入排序,对象排序
2019独角兽企业重金招聘Python工程师标准>>> 1)冒泡排序 package sort; /** * 冒泡排序,每次把数组最大值送到未排序部分的最末端 * @author ...
- 【Java常识】7.0 数组实现冒泡排序、选择排序和二分查找
1.0 冒泡排序原理 冒泡排序就是:轻的上浮,沉的下降.小的往前排,大的往后走. 原理:若一个N个元素的数组,两个相邻位置比较,如果前面的元素比后面的元素大就换位置. 每一次比较,都是相对最沉的到位. ...
- 算法与数据结构(冒泡排序,选择排序和插入排序的总结)
冒泡排序,选择排序和插入排序的总结 在规模较小时,或者元素的有序性较高时,插入排序的时间复杂度可以接近 O(n) ,是上述三种排序里表现最好的 一.通过表格我们可以发现,冒泡排序的时间复杂度是要优于选 ...
- JavaSE(二十四)——冒泡排序、选择排序、直接插入排序以及二分查找
文章目录 1. 冒泡排序 2. 选择排序 3. 直接插入排序 4. 二分查找 1. 冒泡排序 原理:数组元素两两比较,大的往后放,经过一轮比较后,最大元素在最后面,如此往复. 举例说明: 代码: // ...
- 排序算法——冒泡排序、选择排序、直接插入排序
1.冒泡排序 一趟排序的过程,将相邻的两个元素进行比较,如果前一个比后一个大,则将两个元素交换--将最大的元素交换到整个数据的最后. 排序的趟数 = 数据元素的个数 = len - 1 #includ ...
- 冒泡排序、选择排序和插入
冒泡排序.选择排序和插入排序代码如下: package cn.luxh.app.test;public class SimpleSortUtil {/*** 冒泡排序* 从小到大排序* 思路:* 1) ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)...
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
- C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)
参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...
- 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...
- 冒泡排序和选择排序区别_你以为只是简单的排序?(一)
一直在犹豫要不要写排序的文章,因为真的烂大街了.可是一旦细看,还真是很多值的思考的地方,所以还是选择记录一下 以下完整代码,均可从这里获取 https://github.com/Rain-Life/d ...
最新文章
- ZT:成熟是一种明亮而不刺眼的光辉
- 三大主流开源工作流引擎技术分析与市场预测
- POJ 2230 Watchcow 欧拉回路的DFS解法(模板题)
- 问题 D: 最小生成树II
- 模拟利器Mockito
- 一条命令关掉centos所有不必要的服务和端口号
- Pytorch——3.1. 热身:Pytorch基础
- Intellij idea 运行 vertx examples
- 人工智能中的深度结构学习 Learning deep architectures for AI - Yoshua Bengio
- 基于java社区疫情防控管理系统(java毕业设计)
- 百度地图,根据地址计算经度纬度
- 网页链接在线提取工具-免费网页链接在线提取软件
- ASP.NET设置404错误页面
- 有哪些计算机软件可以录制声音,屏幕录制怎么录声音?这三个录屏软件需了解...
- web 项目中资源下载出错,或者下载的文件对应的形式不对应,web 项目下载的文件自动打包为一个压缩包
- 拉线位移编码器零线有电的原因
- 在2B和2C之间,还有一个2H(下)
- MySQL查询 json 字段中是否包含某个value
- 技巧2 router-link鼠标切换样式 vue3中.router-link-exact-active失效
- Python学习——(2)通过网络爬虫获取数据