首页 > 编程语言 >用Python实现十大经典排序算法

用Python实现十大经典排序算法

时间:2023-04-25 15:56:30浏览次数:36  
标签:Sort Python 元素 算法 数组 序列 排序 数据

用Python实现十大经典排序算法

1.冒泡排序
冒泡排序(Bubble Sort)是一种比较简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素,如果它们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。
算法过程
比较相邻的元素,如果前一个比后一个大,就把它们两个对调位置。
对排序数组中每一对相邻元素做同样的工作,直到全部完成,此时最后的元素将会是本轮排序中最大的数。
对剩下的元素继续重复以上的步骤,直到没有任何一个元素需要比较。
冒泡排序每次找出一个最大的元素,因此需要遍历 n-1 次 (n为数据序列的长度)。

img

2.选择排序
选择排序(Selection Sort)的原理,每一轮从待排序的记录中选出最小的元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾。
以此类推,直到全部待排序的数据元素的个数为零。得到数值从小到达排序的数据序列。

也可以每一轮找出数值最大的元素,这样的话,排序完毕后的数组最终是从大到小排列。

选择排序每次选出最小(最大)的元素,因此需要遍历 n-1 次。

img

img

3.快速排序
先从数据序列中取出一个数作为基准数(baseline,习惯取第一个数)。
分区过程,将比基准数小的数全放到它的左边,大于或等于它的数全放到它的右边。
再对左右区间递归(recursive)重复第二步,直到各区间只有一个数。
因为数据序列之间的顺序都是固定的。最后将这些子序列一次组合起来,整体的排序就完成了。

img

img

img

4 归并排序
主要两步(拆分,合并)

步骤1:进行序列拆分,一直拆分到只有一个元素;
步骤2:拆分完成后,开始递归合并。
思路:假设我们有一个没有排好序的序列,那么我们首先使用拆分的方法将这个序列分割成一个个已经排好序的子序列(直到剩下一个元素)。然后再利用归并方法将一个个有序的子序列合并成排好序的序列。

img

img

5 堆排序
对于 n 个元素的数据序列 ,当且仅当满足下列情形之一时,才称之为 堆:

img

img

img

6 插入排序
插入排序(Insertion Sort)就是每一步都将一个需要排序的数据按其大小插入到已经排序的数据序列中的适当位置,直到全部插入完毕。

插入排序如同打扑克牌一样,每次将后面的牌插到前面已经排好序的牌中。

img

7 希尔排序
希尔排序(Shell Sort)是插入排序的一种更高效率的实现。

希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。

img

8 计数排序
计数排序(Counting Sort)的核心在于将输入的数据值转化为键,存储在额外开辟的数组空间中。计数排序要求输入的数据必须是有确定范围的整数。

算法的步骤如下:

先找出待排序的数组中最大和最小的元素,新开辟一个长度为 最大值-最小值+1 的数组
然后,统计原数组中每个元素出现的次数,存入到新开辟的数组中;
接下来,根据每个元素出现的次数,按照新开辟数组中从小到大的秩序,依次填充到原来待排序的数组中,完成排序。

img

9 桶排序
简单来说,桶排序(Bucket Sort)就是把数据分组,放在一个个的桶中,对每个桶里面的数据进行排序,然后将桶进行数据合并,完成桶排序。

该算法分为四步,包括划分桶、数据入桶、桶内排序、数据合并。

img

10 基数排序
基数排序(radix sort)属于“分配式排序”(distribution sort),它是透过键值的部份信息,将要排序的元素分配至某些“桶”中,以达到排序的作用。

基数排序适用于所有元素均为正整数的数组。

img

标签:Sort,Python,元素,算法,数组,序列,排序,数据
From: https://www.cnblogs.com/zx0524/p/17352850.html

相关文章

  • 【Python】操作复杂嵌套的json数据
    1、相关文章递归获取所有key-value值:https://www.cnblogs.com/phoenixy/p/17126455.html 2、对复杂的json进行增删改查①获取数据#-*-coding:UTF-8-*-importjsonfromjsonpath_ngimportparsefromaa_demo.base.loggerimport*classjson_labor_tools:......
  • Python语言学习讲解十六:python之描述符__set__和__get__ 等解释
    一、方法:首先说下python中存在的几种方法:对象方法、静态方法、类方法等,归属权分别为obj、cls、cls其实可以从他们的参数中就可以看的出来对象方法参数中含有self,这个类似于C++中的this指针。静态方法使用@staticmethod来修饰,可以通过类或类的实例对象来调用而已.1.>>>class2.......
  • Python语言学习讲解十九: 异常信息的详细获取
    由于近期忙着手游发布,所以这几天没有及时更新望各位学者见谅。年底了,各大公司特别是游戏行业都着手赶年底末班车,给用户一个新年的礼物。在项目中出现了一些异常日志,但是并没有记录到详细的错误信息。特别是报错在哪一个文件哪一行等信息。[python] viewplain ......
  • python读取文件创建时间
    #获取文件时间(浮点数格式)csv_time=os.path.getmtime("C:/Users/DELL/Desktop/20000/allqueryCommodity.csv")print("csv_time",csv_time)#结果:1682402963.033327#把浮点数格式格式转成格式化格式local_time=time.localtime(csv_time)print("local_time",local_tim......
  • Python中的时间格式的读取与转换(time模块)
    一、时间的表示格式在Python中,表示时间的格式有4种较为常用,分别是浮点数格式、标准可读格式、格式化格式以及自定义格式。(名字是自己起的,非官方命名)(1)浮点数格式用一个float格式的浮点数表示时间,其具体含义表示为从世界标准纪元时间(1970年1月1日)起算至该时间节点的秒数。(2)标准......
  • Python tkinter界面
    #文档C:/Users/Administrator/AppData/Local/Programs/Python/Python311/Doc/html/library/tk.html#TIP:如果不想要cmd,扩展名py改为pywfromtkinterimport*fromtkinter.ttkimport*#窗口tk=Tk()tk.title("联安通达audio/default.ini配置工具V0.0.1")tk.geom......
  • (完结篇)Python web框架FastAPI——一个比Flask和Tornada更高性能的API 框架
    今日鸡汤借问酒家何处有,牧童遥指杏花村。0前言    前几天给大家分别分享了(入门篇)简析Pythonweb框架FastAPI——一个比Flask和Tornada更高性能的API框架和(进阶篇)Pythonweb框架FastAPI——一个比Flask和Tornada更高性能的API框架。今天欢迎大家来到FastAPI系列分享的完结篇......
  • python 修改服务器网卡信息
    importosimportreimportnetifacesimportsubprocessclassNetWorkConfig:def__init__(self):pass@staticmethoddefcheck_network_isvalid(ip,netmask,gateway,dns):"""判断用户输入的网络配置是否可用:pa......
  • python 相关
    python判断文件是否存在os.path.exists(file_path):python多线程p1=threading.Thread(target=down)t1=threading.Thread(target=crawl)print("启动")p1.start()t1.start()print("join")p1.join()t1.join()python多线程与redis控制多线程的数量whileTr......
  • python编程基础
    Python并不是一门新的编程语言,1991年就发行了第一个版本,2010年以后随着大数据和人工智能的兴起,Python又重新焕发出了耀眼的光芒。在2019年12月份世界编程语言排行榜中,Python排名第三,仅次于Java和C语言。Python是一门开源免费的脚本编程语言,它不仅简单易用,而且功能强大......