44.python排序算法(冒泡+选择)
一,冒泡排序:
- 是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个,如果他们的排序错误就把他们交换过来。
- 冒泡排序是稳定的(所谓稳定性就是两个相同的元素不会交换位置)
- 冒泡排序算法的运作如下:
- 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个
- 对每一对相邻元素同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素就是最大数
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,知道没有任何一对数字需要比较
seq = [23,54,66,78,12,5,68,55] for j in range(len(seq) -1): ##告诉里面这个循环,你判断那两组 #j: 每一轮确定的不需要判断的数字个数 for i in range(len(seq) -1 -j):#最后这个判断完放到后面的数字,没有必要继续判断了 #多少次相邻的判断次数 if seq[i] > seq[i+1]: ##最大的放到后面 升序 seq[i],seq[i + 1] = seq[i + 1],seq[i] print(seq)
运行结果:
E:\python学习资料\上课视屏\八阶段:春节后复习\节后复习-4>C:/python36/python.exe e:/python学习资料/上课代码编写/代码练习py/1111.py [5, 12, 23, 54, 55, 66, 68, 78]
二,时间复杂度:
最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序接受。)
- 最坏时间复杂度:O(n2) (可以根据看循环的个数来判断n的几次方)
- 稳定性:稳定
三,选择排序
- 选择排序是一种简单直观的排序涮发
- 选择排序不稳定
- 它的工作原理如下:
- 首先在末排序序列中找到最小(大)元素,存放到排序序列的起始位置(索引丶下标)
- 然后,再从剩余末排序元素中继续寻找最小(大)元素
- 然后放到已经排序序列的末尾
- 以此类推,直达所有的元素排序完毕
seq = [1,5,20,3,16,23,3213,34143,1804,3213,41284,33] #胜出者继续和后面的挑战者打 #谁胜利,记录谁, #这一轮打完了,胜出者到头部 #大数字 放后面, 升序 num_ = 0 for j in range(len(seq) - 1): max_ = num_ #先假定最牛的数据是这个索引 # 控制每一次内层循环的判断起点 # 不光记录了每一次循环取出来的不需要判断的数字个数 # 就记录着当前的我要存放位置,冠军的宝座 for i in range(j + 1,len(seq)): if seq[max_] < seq[i]: #20, 10, 100 #max = 0 #最大的放到后面 升序 max_ = i if num_ != max_: seq[j], seq[max_] = seq[max_], seq[j] num_ += 1 print(seq) #O(n2) == 冒泡 #少去了很多交换工作 #选择排序不稳定
运行结果:
E:\python学习资料\上课视屏\八阶段:春节后复习\节后复习-4>C:/python36/python.exe e:/python学习资料/上课视屏/python排序算法/2.py [41284, 34143, 3213, 3213, 1804, 33, 23, 20, 16, 5, 3, 1]
44.python排序算法(冒泡+选择)的更多相关文章
- Python排序算法之选择排序定义与用法示例
Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...
- python排序算法-冒泡和快速排序,解答阿里面试题
''常见的排序算法\ 插入排序/希尔排序/直接排序/堆排序 冒泡排序/快速排序/归序排序/基数排序 给定一个列表,将这个列表进行排序,要求:> 时间复杂度要小于O(n^2) 复杂度:1.时间复杂 ...
- Python排序算法之选择排序
选择排序 选择排序比较好理解,好像是在一堆大小不一的球中进行选择(以从小到大,先选最小球为例): 1. 选择一个基准球 2. 将基准球和余下的球进行一一比较,如果比基准球小,则进行交换 3. 第一轮过 ...
- python排序算法实现(冒泡、选择、插入)
python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)) ...
- python 排序算法总结及实例详解
python 排序算法总结及实例详解 这篇文章主要介绍了python排序算法总结及实例详解的相关资料,需要的朋友可以参考下 总结了一下常见集中排序的算法 排序算法总结及实例详解"> 归 ...
- 带你掌握4种Python 排序算法
摘要:在编程里,排序是一个重要算法,它可以帮助我们更快.更容易地定位数据.在这篇文章中,我们将使用排序算法分类器对我们的数组进行排序,了解它们是如何工作的. 本文分享自华为云社区<Python ...
- 八大排序算法~简单选择排序【记录下标k变量的作用】
八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...
- python排序算法之冒泡,选择,插入
1.参考 一本关于排序算法的 GitBook 在线书籍 <十大经典排序算法>,使用 JavaScript & Python & Go 实现 2.冒泡排序:两两比较,互换位置 ...
- Python排序算法——选择排序
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787340.html 一.选择排序(Sele ...
随机推荐
- python 实践--新闻聚合
采集新闻,体会到面向问题和面向对象的区别. 如果希望新闻来源多出,比如NNTP,Web.可以实现:Source,Destination,NewItem,NewAgent. Scoure处理来源, De ...
- linux重启之后No CUDA-supporting devices found!
实验室做并行计算的服务重启后,采用cuda接口的应用程序vasp_gpu,运行时提示: CUDA Error in cuda_main.cu, line 144: unknown error No C ...
- mouseenter([[data],fn])
mouseenter([[data],fn]) 概述 当鼠标指针穿过元素时,会发生 mouseenter 事件.该事件大多数时候会与mouseleave 事件一起使用.广州大理石机械构件 与 mous ...
- PHP mysqli_character_set_name() 函数
返回数据库连接的默认字符集: <?php $con=mysqli_connect("localhost","my_user","my_passw ...
- Ubuntu: error: snap “phpstorm” has “install-snap” change in progress
Ubuntu: error: snap “phpstorm” has “install-snap” change in progress 投稿日 : 2019-06-10 | カテゴリー : linu ...
- java如何向数组里添加元素
向数组里添加一个元素怎么添加,这儿总结有三种方法: 1.一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度.但有个可以改变大小的数组为ArrayList,即可以定义一个Array ...
- UCOSIII(一)
一,前后台系统和RTOS 1,前后台系统 早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念.通常把程序分为两部分:前台系统和后台系统. ...
- 1633:【例 3】Sumdiv
#include<bits/stdc++.h> #define ll long long using namespace std; ; ll a,b,ans=,cnt; ll p[],c[ ...
- Java实例化对象过程中的内存分配
Java实例化对象过程中的内存分配: https://blog.csdn.net/qq_36934826/article/details/82685791 问题引入这里先定义一个很不标准的“书”类,这 ...
- ROS Topic 常用指令
rostopic list rosnode list一樣,就是列出目前運行中的topic有哪些. rostopic echo <topic_name> 接下來這個指令比較重要啦,就是去監聽 ...