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

这篇文章有的排序算法是:快速排序、希尔排序、归并排序。

快速排序

'''
快速排序
'''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_index < hight_index and min_val <= aList[hight_index]:hight_index -= 1aList[low_index] = aList[hight_index]# low 右移动while low_index < hight_index and min_val > aList[low_index]:low_index += 1aList[hight_index] = aList[low_index]aList[low_index] = min_val# 左边quick_sort(aList, first, low_index - 1)# 右边quick_sort(aList, low_index + 1, last)if __name__ == "__main__":li = [54, 26, 93, 17, 77, 31, 44, 55, 20]# li = [26, 93, 54]print(li)quick_sort(li, 0, len(li) - 1)print(li)

快速排序的思路是:

1、从列表中找出一个元素,min_val 作为“基准”元素。

2、然后对列表进行排序,排序的规则是,比min_val基准元素小的放在基准元素的左边,比min_val 基准元素大的放在基准元素的右面。这个时候基准元素就在这个列表的中间的位置。这个称为分区操作。

3、递归进行操作,就是在把基准元素左边的元素当做一个列表重复第2步操作,把基准元素左边的元素当做一个列表重复第2步操作。

归并排序

'''
归并排序
'''def merge_sort(aList):n = len(aList)if n <= 1:return aListmid = n//2left_li = merge_sort(aList[:mid])right_li = merge_sort(aList[mid:])left_pointer, right_pointer = 0, 0result = []while left_pointer < len(left_li) and right_pointer < len(right_li):if left_li[left_pointer] <= right_li[right_pointer]:result.append(left_li[left_pointer])left_pointer += 1else:result.append(right_li[right_pointer])right_pointer += 1result += left_li[left_pointer:]result += right_li[right_pointer:]return resultif __name__ == "__main__":li = [54, 26, 93, 17, 77, 31, 44, 55, 20]print(li)a = merge_sort(li)print(a)

归并排序的思路是:

1、归并排序的思想就是先递归分解数组,再合并数组。

2、然后将两个列表第一个元素进行比较,将小的数据push到新的列表里面。

希尔排序

'''
希尔排序
'''def shell_sort(aList):n = len(aList)gap = n // 2while gap > 0:for j in range(gap, n):i = jwhile i > 0:if aList[i] < aList[i - gap]:aList[i - gap], aList[i] = aList[i], aList[i - gap]i -= gapelse:breakgap //= 2if __name__ == "__main__":li = [54, 26, 93, 17, 77, 31, 44, 55, 20]print(li)shell_sort(li)print(li)

 

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

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

相关文章

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

搜狗高速浏览器是一款很好用的浏览器软件&#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浏…

Chrome浏览器隐藏扩展插件图标

隐藏Chrome浏览器扩展插件的图标。 隐藏之后 把鼠标移动到 上面显示那个红色的位置就可以拖动鼠标&#xff0c;然后就可以隐藏了。

如何设置允许PP视频访问相机

下面和大家分享一下如何设置允许PP视频访问相机&#xff0c;希望可以帮助到有需要的朋友。 如何设置允许PP视频访问相机 1、打开pp视频。见下图 如何设置允许PP视频访问相机 2、点击右下角我的。见下图 如何设置允许PP视频访问相机 3、点击打开设置。见下图 如何设置允许…