Python排序算法(一)冒泡排序、选择排序、插入排序

今天总结一下Python中的排序算法。这篇文章有的排序算法是:冒泡排序、选择排序、插入排序

冒泡排序

先看一下代码。

'''
冒泡排序
'''def bubble_sort(aList):n = len(aList)for i in range(0, n - 1):for j in range(0, n - i - 1):if aList[j] > aList[j + 1]:aList[j], aList[j + 1] = aList[j + 1], aList[j]if __name__ == "__main__":li = [54, 26, 93, 17, 77, 31, 44, 55, 20]print(li)bubble_sort(li)print(li)

冒泡排序的思路是:

1、比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。

2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。

3、针对所有的元素重复以上的步骤,除了最后一个。

过程分析:

我就不拿这个代码来分析了,我就说一下生活中是怎么用到冒泡排序的,假设你们第一次上体育课,一般上体育课的时候,体育老师要的的事就是按照同学们的身高从低到高排序,想必这个场景大家都很熟悉。假设班上的n位同学此时已经站成一队了,这个时候是没有顺序的,那么这里怎么用到排序算法来实现排序的呢。

1、首先体育老师先比较一下第一个同学(A)和第二个同学(B)的身高,可以看到A比B的身高要高,所以A和B换一下位置,然后,然后老师再比较第二个同学和第三个同学,依次这样类推....等到所有同学比较一次,比较一次可以看到最后一位同学是我们所有同学中身高最高的,也就是说是列表里面数据最大的。

2、我们找出最高的同学了,那么老师就可以想,我下次在剩余的同学中,再从第一位同学开始和相邻的同学比较,我用同样的方法也可以找到剩余中身高最高的。

3、老师依次去循环第二步的操作,一直等到只有一位同学,并且那位同学是所有同学中最矮的,然后老师排序结束。

选择排序

'''
选择排序选择排序是每次找出最小的索引,
然后替换数据的位置'''def select_sort(aList):'''选择排序'''l = len(aList)for j in range(l):min_index = jfor i in range(min_index + 1, l):if aList[min_index] > aList[i]:min_index = i# 循环一遍后找到最小的索引aList[j], aList[min_index] = aList[min_index], aList[j]if __name__ == "__main__":li = [9 , 16, 17, 15, 11]print(li)select_sort(li)print(li)

选择排序的思路是:

1、首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,

2、再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

我们还是拿老师排队来举例子。此时每位同学手里都拿了一个号码,假设从 0 ~ n ,

1、老师第一次要做的就是从这 n - 1 同学中找到最矮那位同学的编号,老师怎么找呢?还是从头开始两个两个相互比较等到从头到尾比较相互比较一次后,老师知道谁身高最矮那位同学的编号(min_index)了。此时老师大喊一声,min_index同学和第一位同学互换一下位置,连同手中的号码牌也换一下。这个时候第一位同学就是全班中身高最矮的同学了,这个时候我们可以将全班同学看成两部分一部分是有序的(假设一位同学也是有序的),另一部分是无序的也就是除第一个同学外其余的同学。

2、老师从没有顺序中的同学中再重复找到身高最矮同学的编号,放到有序队列的末尾,依次这样类推,就把所有同学的身高有了个排序。

我们看出选择排序的主要思想是从无序队列中找出值最小的数据的编号,然后放到有队列中,只不过是这个有序队列一直在扩充,无序队列一直在减少。

插入排序

'''
插入排序
'''
def insert_sort(aList):'''插入排序'''n = len(aList)for i in range(n):j = i# print('j= ', j)while j > 0:if aList[j] < aList[j - 1]:aList[j], aList[j - 1] = aList[j - 1], aList[j]# print(j)j -= 1# print(' ')if __name__ == "__main__":li = [54, 26, 93, 17, 77, 31, 44, 55, 20]print(li)insert_sort(li)print(li)

插入排序的思路:

1、插入排序可以这样看待,是将数据序列分成两部分,前面一部分是有序的,后面一部分是无序的。

2、怎么将将无序的变成有序的呢,我们举个例子,还是上面老师排队的例子。

首先从第一位同学开始,然后第一位和第二位比较然后排序,此时这两位同学是有序的了,

然后我们再从从无序的队列中取出一位同学,也就是第三位,将第三位和第二位比较,然后他们中矮的同学再和第一位比较,此时这三位同学是有序的,

然后再取出第四位同学,然前面的比较.....,一直到最后一位同学比较。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win7系统虚拟键盘打开的方法

有时候自己的键盘使用久了以后经常会突然坏掉&#xff0c;这个时候我们可以开启电脑自带虚拟键盘来解燃眉之急。那么Win7的虚拟键盘该怎么打开?今天就和小编一起来看看Win7系统虚拟键盘打开的方法吧。 Win7系统虚拟键盘打开的方法 1、打开电脑左下角的“开始”&#xff0c;然…

Python排序算法(二) 快速排序、希尔排序、归并排序

这篇文章有的排序算法是&#xff1a;快速排序、希尔排序、归并排序。 快速排序 快速排序 def quick_sort(aList, first, last):if first > last:returnmin_val aList[first]low_index firsthight_index lastwhile low_index < hight_index:# hight 左移动while low_i…

怎么开启搜狗高速浏览器的手动升级?

搜狗高速浏览器是一款很好用的浏览器软件&#xff0c;随着软件的完善&#xff0c;我们也要对软件进行升级&#xff0c;才能享受更多更优质的功能&#xff0c;我们可以用手动升级来代替提示升级和自动升级所带来的不便&#xff0c;那么&#xff0c;怎么操作呢?下面就由小编来教…

Vue里引入three.js

最近因为three.js的项目要用Vue.js 来重构&#xff0c;所以不太清楚在Vue里面怎么引入。找了很多方法都是一直报错&#xff0c;最后在Stack Overflow找到了。 首先是下载包&#xff0c;直接用 npm install three --save 就行了。 然后就是在component里面引入。 <templat…

正则总结(Python)

正则大家都不陌生&#xff0c;工作中一定会接触到。最近在Python中用的了正则&#xff0c;所以顺便整理一下。 一、re模块的使用 #导入 re模块 import re# 使用match方法进行匹配操作 result re.match(正则表达式, 要匹配的字符串)# 如果上一步匹配到数据的话&#xff0c;可…

怎样查看优酷视频播放记录?

当我们在优酷上观看视频时&#xff0c;有时可能由于没空并不能一次性看完;或者&#xff0c;对于一些视频合集&#xff0c;也可能没有兴趣将其中的所有剧集挨个看遍&#xff0c;通常只是挑了那么一两个尝了尝鲜……这样一来&#xff0c;当下次来到优酷想接着播放时&#xff0c;对…

python二分法查找

常见的搜索方法&#xff1a;顺序查找、二分法查找、二叉树查找、哈希查找。 二分法查找 二分查找又称折半查找&#xff0c;优点是比较次数少&#xff0c;查找速度快&#xff0c;平均性能好&#xff1b;其缺点是要求待查表为有序表&#xff0c;且插入删除困难。因此&#xff0…

如何在搜狗浏览器更换页面字体?搜狗浏览器更换页面字体的方法

搜狗浏览器是一款提供给用户更好体验的浏览器&#xff0c;该软件拥有众多好用的功能&#xff0c;给用户带来更便利的服务&#xff0c;但是有时候又觉得太单调了&#xff0c;想换个字体&#xff0c;体验下不一样的感受&#xff0c;又不知道在哪里更换&#xff0c;接下来&#xf…

Python 二叉树实现

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”&#xff08;left subtree&#xff09;和“右子树”&#xff08;right subtree&#xff09; 二叉树的节点表示以及树的创建 1、通过使用Node类中定义三个属性&#xff0c;分别为elem本身的值&#xff0c;还…

谷歌浏览器自动填充功能怎么开启?自动填充功能开启方法

为了避免用户在登录同一网站时频频输入账号、密码的现象&#xff0c;谷歌在自家的Chrome浏览器中贴心的加入了“自动填充功能”。那么&#xff0c;谷歌浏览器自动填充功能要怎么开启呢?不清楚操作方法的朋友&#xff0c;不妨收藏学习一下。 方法步骤 在Chrome地址栏输入“ch…

Python二叉树遍历

树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问&#xff0c;即依次对树中每个结点访问一次且仅访问一次&#xff0c;我们把这种对所有节点的访问称为遍历&#xff08;traversal&#xff09;。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,…

Win11开始菜单怎么从中间移到左边?

相信不少用户都已经安装上了Windows11系统&#xff0c;但是有许多用户针对Windows11的开始菜单在中间非常的不习惯&#xff0c;想要把开始菜单移动到左边&#xff0c;像Win10系统那样。那么具体要怎么操作呢?下面小编就带着大家一起看看吧! 操作方法&#xff1a; 1、首先&am…

【Python学习笔记】Python深拷贝和浅拷贝

Python中copy模块里面常用的两个方法copy.copy() 和copy.deepcopy()也就是浅拷贝和深拷贝 1、copy.deepcopy() 深拷贝&#xff0c;是对于一个对象所有层次的拷贝。 2、copy.copy()浅拷贝&#xff0c;一般来说是对最顶层对象的拷贝。另外浅拷贝对不可变类型&#xff08;如&…

如何为火狐浏览器添加附加组件?火狐浏览器附加组件管理器使用教程

作为一款开放源码的浏览器产品&#xff0c;火狐在国内也不乏粉丝。当然&#xff0c;这其中也有火狐浏览器上的插件功能的部分功劳&#xff0c;毕竟其要优于许多同类产品!那么&#xff0c;该如何为火狐浏览器添加附加组件呢?不清楚操作方法的朋友&#xff0c;还不赶紧来了解一下…

Python装饰器(一)

要学习装饰器&#xff0c;首先要知道闭包的东西。不过这里不再说闭包的东西了。 我们假设一个场景&#xff1a;假如在公司有多个开发部门&#xff0c;A、B....。现在A部门开发出了一个功能&#xff0c;然后其他部门去调用A部门开发的功能。 比如: 如下f1、f2...&#xff0c;是…

怎么在QQ浏览器上使用微信聊天?

操作步骤&#xff1a; 1、启动qq浏览器。在qq浏览器界面中的插件栏中&#xff0c;会自动出现微信图标&#xff0c;浏览器自带了微信网页版的插件; 怎么在QQ浏览器上使用微信聊天&#xff1f; 2、点击该图标&#xff0c;然后会弹出一个二维码的窗口&#xff0c;拿出您的手机&…

搜狗输入法怎么清除输入记忆 搜狗输入法清除输入记忆方法

记忆功能清除方法如下&#xff1a; 1、打开搜狗输入法; 搜狗输入法怎么清除输入记忆 搜狗输入法清除输入记忆方法 2、进入搜狗主界面&#xff0c;点击右下角“我的”进入界面; 搜狗输入法怎么清除输入记忆 搜狗输入法清除输入记忆方法 3、进入“我的”界面&#xff0c;点击…

Python装饰器(二)

想再说一下装饰器的使用和原理。 之前已经说了装饰器的概念&#xff0c;和语法&#xff0c;这里想再进一步说一下几个装饰器的例子。 例子一&#xff1a; def makBlod(fn):def wrappen():return "<b>" fn() "</b>"return wrappendef makI…

Win11任务栏透明度怎么调整?Win11任务栏透明度设置教程

许多小伙伴最近在使用Windows11的时候&#xff0c;总觉得Windows11的任务栏的颜色非常的难堪&#xff0c;想要自己把任务栏调整到透明的&#xff0c;那么具体我们要怎么调整Windows11任务栏透明度呢?下面小编就为大家介绍一下吧! 操作方法&#xff1a; 1、首先&#xff0c;我…

谷歌浏览器下载的文件保存在哪里?

许多人在使用谷歌浏览器上网时都会下载一些好看的电影、电视、小说或可玩性较高的游戏&#xff0c;但在完成下载后&#xff0c;却不清楚自己下载的东西放在了哪里!这不禁令人更好奇&#xff0c;谷歌浏览器下载的文件保存在哪里?下面让我们来了解一下。 方法步骤 打开Chrome浏…