如何使用python实现希尔,计数、基数基础排序的代码

  介绍

小编给大家分享一下如何使用python实现希尔,计数、基数基础排序的代码,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

<强>希尔排序

希尔排序是一个叫希尔的数学家提出的一种优化版本的插入排序。

首先取一个整数d1=n//2,将元素分为d1个组,每组相邻元素之间的距离为d1,在各组内进行直接插入排序。

取第二个整数d2=d1//2,重复上述分组排序过程,直到di=1,即所有元素在同一组内进行直接插入排序。

希尔排序是使整体数据越来越接近有序;最后一趟排序使得所有数据有序。

如何使用python实现希尔,计数、基数基础排序的代码

<强>实现

#,希尔排序   def  shell_sort(李):   n 才能=,len(李)   时间=gap 才能;n //2   while 才能;gap 祝辞,0:   ,,,for 小姐:拷贝范围(差距,,n):   ,,,,,李temp =,(我)   ,,,,,j =,小姐:安康;差距   ,,,,,while  j 祝辞=,0,以及李[j],祝辞,临时:   ,,,,,,,李(时间+ j 差距),=,李[j]   ,,,,,,,j  -=,差距   ,,,,,李(时间+ j 差距),=temp      ,,,gap //=, 2

<强>算法分析

<李>

时间复杂度:O (n1.3)

<李>

最好时间复杂度:O (n)

<李>

最坏时间复杂度:O (n2)

<李>

空间复杂度:O (1)

<李>

稳定性:不稳定

<强>计数排序

计数排序是一种非比较性质的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。
计数排序过程中不存在元素之间的比较和交换操作,根据元素本身的值,将每个元素出现的次数记录到辅助空间后,通过对辅助空间内数据的计算,即可确定每一个元素最终的位置。

<李>

根据待排序集合中最大元素和最小元素的差值范围,申请额外空间;

<李>

遍历待排序集合,将每一个元素出现的次数记录到元素值对应的额外空间内,

<李>

对额外空间内数据进行计算,得出每一个元素的正确位置;

<李>

将待排序集合每一个元素移动到计算得出的正确位置上。

如何使用python实现希尔,计数、基数基础排序的代码

<强>实现

def  count_sort (li, max_num=100):   count 才能=,[0,for  _ 拷贝范围(时间+ max_num  1))      for 才能;val 李:拷贝   ,,,计数(val), +=1   li.clear才能()   #才能,表示我这个数出现了五次   for 我,才能,v 拷贝列举(数):   ,,,for  _ 拷贝范围(v):   ,,,,,li.append (i)

<强>算法分析

假定原始数列的规模是N

最大值和最小值的差是M

计数排序的时间复杂度是O (N + M)

如果不考虑结果数组,只考虑中间数组大小的话,空间复杂度是O (M)

<>强基数排序

基数排序(英语:基数排序)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。

由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

多关键字排序:现在有一个员工,要求按照薪资排序,年龄相同的员工按照按照年龄排序。

先按照年龄进行排序,再按照薪资进行稳定的排序。

对32岁,13日,94年,52岁,17岁,54岁,93年进行排序,是否可以看作多关键字排序?

如何使用python实现希尔,计数、基数基础排序的代码

实现

#,基数排的序   def  radix_sort(李):   max_num 才能=,马克斯(李)   小姐:才能=0   while 才能;(10,* *,小姐:& lt;=, max_num):   ,,,buckets =, [[], for  _ 拷贝范围(10))   ,,,for  val 李:拷贝   ,,,,,#,i=0,个位,i=1,十位,我=2,百位,. .   ,,,,,digit =, val //,(10 * *我),%,10   ,,,,,桶[数字].append (val)   ,,,li.clear ()   ,,,for  bucket 拷贝桶:   ,,,,,for  val 拷贝桶:   ,,,,,,,li.append (val)   ,,,小姐:+=,1

如何使用python实现希尔,计数、基数基础排序的代码