我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python八大排序怎么实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python八大排序怎么实现

这篇文章主要介绍了Python八大排序怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python八大排序怎么实现文章都会有所收获,下面我们一起来看看吧。

1.基数排序

基数排序的基本思想是先将数字按照个位数上数字的大小进行排序,排序之后再将已经排过序的数字再按照十位数上数字的大小进行排序,依次推类

# 统计这个列表中数字最大的数字有几位def radix_sort_nums(nums):    max = nums[0]    for i in nums:        if max < i:            max = i    times = 0    while max > 0:        max = int(max/10)        times += 1    return times# 每个数字各个位置的数字大小,比如(123,1)则是3,(123,2)则是2def get_num(num,n):    return (int(num/(10**(n-1)))) % 10# 主程序def radix_sort(nums):    count = 10*[None]# 定义的数组,用于存放当前位数的元素个数    bucket = len(nums)*[None]# 用于暂时存放排序结果# 分别从个位/十位/百位开始循环    for pos in range(1, radix_sort_nums(nums)+1):# 每次排序完都要清空各个位数存放的数据统计        for i in range(10):            count[i] = 0        for i in range(len(nums)):# 获得0到9每个位数的个数            j = get_num(nums[i], pos)            count[j] = count[j]+1# 获得相对应位数的边界值        for i in range(1, 10):            count[i] = count[i] + count[i-1]        for i in range(len(nums)-1, -1, -1):# 求出相应位数的数字            j = get_num(nums[i], pos)#将元素按相应位数的上数字的大小排序            bucket[count[j]-1] = nums[i]#让相应位数上数字相等的元素不会放在同一位置而被替代            count[j] = count[j]-1# 将暂时存储在bucket的元素数据返回到nums中        for i in range(0, len(nums)):            nums[i] = bucket[i]    return numsprint(radix_sort([45, 32, 8, 33, 12, 22, 19, 97]))

2.归并排序

归并排序其实是将原数列分为很多个小数列将其排序,在小数列排序完之后,再将各个小数列进行排序,最后得到一个全部有序的数列

Python八大排序怎么实现

# 归并排序# 这个函数主要目的是为了实现合并并排序def mergearray(nums, first, mid, last, temp):# i, j分别是第一个组数的第一个位置,第二组数的第一个位置    i, j, k = first, mid+1, 0# 当俩边数组都存在数的时候,依次比较对应位置的大小    while i <= mid and j <= last:        if nums[i] <= nums[j]:            temp[k] = nums[i]            i = i+1            k = k+1        else:            temp[k] = nums[j]            j = j+1            k = k+1# 第一组数还有多的数的情况    while i <= mid:        temp[k] = nums[i]        i = i+1        k = k+1# 第二组数还有多的情况    while (j <= last):        temp[k] = nums[j]        j = j+1        k = k+1# 将排列过的数组赋予nums(开始的时候只是部分有序,随着递归最后变成全部有序)    for i in range(k):        nums[first+i] = temp[i]# 分组,利用递归def merge_sort(nums,first,last,temp):    if first < last:        mid = int((first + last) / 2)# 分出第一组数        merge_sort(nums, first, mid, temp)# 分出第二组数        merge_sort(nums, mid+1, last, temp)# 合并并排序        mergearray(nums, first, mid, last, temp)def merge_sort_array(nums):# 创建一个和想要排序数列相同数量的空列表    temp = len(nums)*[None]# 利用递归进行排序    merge_sort(nums, 0, len(nums)-1, temp)print(merge_sort_array([45, 32, 8, 33, 12, 22, 19, 97]))

3.堆排序

堆排序利用了二叉树的结构,使子节点的值一直小于根节点

def big_endian(arr, start, end):    root = start    child = root * 2 + 1  # 左孩子    while child <= end:        # 孩子比最后一个节点还大,也就意味着最后一个叶子节点了,就得跳出去一次循环,已经调整完毕        if child + 1 <= end and arr[child] < arr[child + 1]:            # 为了始终让其跟子元素的较大值比较,如果右边大就左换右,左边大的话就默认            child += 1        if arr[root] < arr[child]:            # 父节点小于子节点直接交换位置,同时坐标也得换,这样下次循环可以准确判断:是否为最底层,            # 是不是调整完毕            arr[root], arr[child] = arr[child], arr[root]            root = child            child = root * 2 + 1        else:            breakdef heap_sort(nums):  # 无序区大根堆排序    first = len(nums) // 2 - 1    for start in range(first, -1, -1):        # 从下到上,从左到右对每个节点进行调整,循环得到非叶子节点        big_endian(nums, start, len(nums) - 1)  # 去调整所有的节点    for end in range(len(nums) - 1, 0, -1):        nums[0], nums[end] = nums[end], nums[0]  # 顶部尾部互换位置        big_endian(nums, 0, end - 1)  # 重新调整子节点的顺序,从顶开始调整    return numsprint(heap_sort([3, 1, 4, 9, 6, 7, 5, 8, 2, 10]))

4.简单选择排序

简单选择排序的方法则是将所选值与剩下值中比他小的值进行比较

比如选取第一个值,往后找到比他小的值就与其对调,对调后的值再接下去进行比较,直至找到最小的值,随后再第二个值&hellip;&hellip;直至循环到倒数第二个值.

Python八大排序怎么实现

def select_sort(nums):# 遍历所有的值    for i in range(len(nums)):# 当前位置初始值        min = nums[i]# 与比他后面的值进行比较,小则互换        for j in range(i+1, len(nums)):            if nums[j] < min:                nums[j], min = min, nums[j]# 将值返回数列        nums[i] = min    return numsprint(select_sort([45, 32, 8, 33, 12, 22, 19, 97]))

5.直接插入排序

首先遍历所有元素,随后从第一个数开始将数列从后往前遍历,如果后面的数小于前面的数,则互换位置,依次推类,直到遍历完成

# 直接插入排序def insert_sort(nums):    for i in range(len(nums)-1):        for j in range(i, -1, -1):            if nums[j] > nums[j+1]:                nums[j], nums[j + 1] = nums[j + 1], nums[j]    return numsprint(insert_sort([45, 32, 8, 33, 12, 22, 19, 97]))

6.希尔排序

希尔排序其实就相当于对直接插入排序的升级版,每次都选取一半的长度,随后利用直接插入法进行排序,从而更快的获得结果

Python八大排序怎么实现

def insert_shell(nums):    # 初始化l值,此处利用序列长度的一半为其赋值    l = int(len(nums)/2)    # 第一层循环:依次改变l值对列表进行分组    while l >= 1:    # 下面:利用直接插入排序的思想对分组数据进行排序        for i in range(len(nums) - 1):            for j in range(i, -1, -1):                if nums[j] > nums[j + 1]:                    nums[j], nums[j + 1] = nums[j + 1], nums[j]    # while循环条件折半        l = int(l/2)    return nums

7.快速排序

快速排序首先得选取一个基准值,这个代码用第一个数作为基准值,将比基准值小的值放到左边,比基准值大的值放到右边,随后再将左边后右边按照上述方法进行排序,直到完全正确为止

# 实现快速排序方法的函数def quick_sort_num(nums,start,end):    if start < end:    # 定义基准值为第一个数        i, j, pivot = start, end, nums[start]        while i < j:        # 将基准数右边的数中比基准数小的放到左边            while i < j and nums[j] >= pivot:                j = j-1            if i < j:                nums[i] = nums[j]                i = i+1            # 将基准数左边的数中比基准数大的数放到右边            while i < j and nums[i] < pivot:                i = i+1            if i < j:                nums[j] = nums[i]                j = j-1        nums[i] = pivot        # 分别将基准数左边的数列和右边的数列进行递归        quick_sort_num(nums, start, i-1)        quick_sort_num(nums, i+1, end)    return nums# 快速排序主体函数def quick_sort(nums):    start = 0    end = len(nums)-1    nums = quick_sort_num(nums, start, end)    return numsprint(quick_sort([45, 32, 8, 33, 12, 22, 19, 97]))

8.冒泡排序

冒泡排序是最简单的排序,依次将左右俩个元素进行比较,每次比较完最后的一个数必定是最大的,依次推类,直到全部元素都比较玩

def bubble_sort(nums):# 交换的轮数    for i in range(len(nums) - 1):    # 每一轮交换        for j in range(len(nums) - i - 1):        # 比较值,并根据大小进行互换            if nums[j] > nums[j + 1]:                nums[j], nums[j + 1] = nums[j + 1], nums[j]    return numsprint(bubble_sort([45, 32, 8, 33, 12, 22, 19, 97]))

9.时间测试

我们先创建一个列表,列表中有10000条数据,随后用相同的数据进行测试

import randomlis = []for i in range(10000):    i = random.randint(0,500)    lis.append(i)print(lis)

创出来的数据就不进行展示了。。

随后我们进行测试:

冒泡排序法:11.535502672195435直接插入排序法:12.057243585586548希尔排序法:86.3020749092102(大概是我的方法不大好吧,我差点以为他排不出来了)基数排序法:0.051932334899902344(老大哥就是牛皮)归并排序法:0.08577108383178711(233)快速排序:0.04795527458190918堆排序:0.09175491333007812

根据自己的测试,基数排序,归并排序,快速排序,和堆排序速度很快,感觉随着代码量的增长时间增长很慢,其余的几个则不尽如人意了。

关于“Python八大排序怎么实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Python八大排序怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python八大排序怎么实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python八大排序怎么实现

这篇文章主要介绍了Python八大排序怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python八大排序怎么实现文章都会有所收获,下面我们一起来看看吧。1.基数排序基数排序的基本思想是先将数字按照个位数
2023-07-05

Python实现八大排序算法

如何用Python实现八大排序算法 1、插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为 O(n^2)。是稳定的排序方法。插入算法把要
2022-06-04

八大排序算法的Python实现

Python实现八大排序算法,具体内容如下 1、插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算
2022-06-04

Python中有八大排序算法

本篇文章为大家展示了Python中有八大排序算法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、插入排序描述插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一
2023-06-17

Python怎么实现十大经典排序算法

这篇“Python怎么实现十大经典排序算法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么实现十大经典排序算法
2023-06-29

TypeScript十大排序算法插入排序怎么实现

今天小编给大家分享一下TypeScript十大排序算法插入排序怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一. 插
2023-07-05

Python怎么实现冒泡排序

本篇内容主要讲解“Python怎么实现冒泡排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现冒泡排序”吧!Python实现的源码的测试结果:def bubble_sort(a
2023-06-04

mysql怎么实现从大到小排序

在MySQL中,可以使用ORDER BY子句来按照某个字段的值从大到小进行排序。例如,假设有一个表名为students,其中包含字段id和name,可以使用以下语句来按照id字段的值从大到小对记录进行排序:SELECT * FROM st
mysql怎么实现从大到小排序
2024-04-28

Java十大排序算法怎么实现

本篇内容介绍了“Java十大排序算法怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!排序算法的稳定性: 假定在待排序的记
2023-06-29

excel排序排名次由小到大怎么实现

这篇文章主要介绍了excel排序排名次由小到大怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇excel排序排名次由小到大怎么实现文章都会有所收获,下面我们一起来看看吧。excel排序排名次由小到大的方法
2023-07-02

python中怎么实现冒泡排序和插入排序

本篇文章给大家分享的是有关python中怎么实现冒泡排序和插入排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  1、冒泡排序  冒泡排序的主要思想类似于水底的气泡,从水底向
2023-06-02

python字符串降序排序怎么实现

可以使用sorted函数对字符串进行降序排序,然后使用join方法将排好序的字符重新组合成一个字符串。示例如下:pythons = "hello world"sorted_s = ''.join(sorted(s, reverse=True
2023-10-18

python怎么实现排序并标上序号

本篇内容主要讲解“python怎么实现排序并标上序号”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python怎么实现排序并标上序号”吧!python排序并标上序号需求:利用python实现排序
2023-07-02

python中怎么实现字典排序

python中怎么实现字典排序,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。2023-06-04

Python怎么实现字符串排序

小编给大家分享一下Python怎么实现字符串排序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python主要应用领域有哪些1、云计算,典型应用OpenStack
2023-06-14

python堆排序算法怎么实现

堆排序算法的实现步骤如下:构建最大堆(Max Heap):首先将待排序的序列构建成一个最大堆。从最后一个非叶子节点开始,依次将当前节点与其子节点进行比较,如果当前节点的值小于子节点的值,则将两者交换位置,并继续比较下一个子节点,直到当前节点
2023-10-26

用Python怎么实现快速排序

用Python实现快速排序的方法:1、定义一个名为quick_sort的函数,使用递归的方法来实现快速排序;2、检查数组的长度,如果长度小于等于1,则直接返回数组,否则,选择数组中的第一个元素作为枢纽元素(pivot),然后将数组分成比枢纽
用Python怎么实现快速排序
2023-12-18

C++怎么实现可排序的最大块数

这篇文章主要介绍“C++怎么实现可排序的最大块数”,在日常操作中,相信很多人在C++怎么实现可排序的最大块数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++怎么实现可排序的最大块数”的疑惑有所帮助!接下来
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录