Python八大排序实现方法(基数排序、归并排序、堆排序、简单选择排序、直接插入排序、希尔排序、快速排序、冒泡排序) 您所在的位置:网站首页 严重贫血的血常规指标 Python八大排序实现方法(基数排序、归并排序、堆排序、简单选择排序、直接插入排序、希尔排序、快速排序、冒泡排序)

Python八大排序实现方法(基数排序、归并排序、堆排序、简单选择排序、直接插入排序、希尔排序、快速排序、冒泡排序)

#Python八大排序实现方法(基数排序、归并排序、堆排序、简单选择排序、直接插入排序、希尔排序、快速排序、冒泡排序)| 来源: 网络整理| 查看: 265

1.基数排序

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

# 统计这个列表中数字最大的数字有几位 def radix_sort_nums(nums): max = nums[0] for i in nums: if max 0: max = int(max/10) times += 1 return times # 每个数字各个位置的数字大小,比如(123,1)则是3,(123,2)则是2 def 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 nums print(radix_sort([45, 32, 8, 33, 12, 22, 19, 97])) 2.归并排序

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

# 归并排序 # 这个函数主要目的是为了实现合并并排序 def mergearray(nums, first, mid, last, temp): # i, j分别是第一个组数的第一个位置,第二组数的第一个位置 i, j, k = first, mid+1, 0 # 当俩边数组都存在数的时候,依次比较对应位置的大小 while i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有