线性时间排序
2021-02-14 16:17
标签:算法 计数排序 复杂 出现 元素 复杂度 signed self 树模型 堆排序,快速排序的时间复杂度为nlog(n)。他们都是运用比较排序的结果。好比决策树模型。 属于线性时间排序的算法有:计数排序,基数排序和桶排序。 计数排序: 先分别求出每个元素的频数,不过如果元素值较大时,比较浪费内存空间。 排序代价为theta(n)。同时上述算法是稳定的,也就是说对于两个相同的数来说,在输入数组中先出现的数,在输出数组中也位于前面。 实际上是因为我们在最后的给B赋值过程中,用的倒叙。 基数排序: 基数牌组法先是按最低有效位进行排序。为确保基数排序的正确性,一位排序算法必须是稳定的。 更加详细,请看:https://blog.csdn.net/z84616995z/article/details/18502085 桶排序法: 桶排序法假设了输入数据服从均匀分布,平均情况下时间代价为theta(n)。桶排序将[0, 1)区间分为n个相同大小额子区间,称之为桶。然后,将n个输入书分别放到各个同中。这里,我们按找顺序放进桶,桶中的元素是无序的。 线性时间排序 标签:算法 计数排序 复杂 出现 元素 复杂度 signed self 树模型 原文地址:https://www.cnblogs.com/a-runner/p/12722500.htmldef Counting_Sort(A,B,k):
for i in range(k+1):
c[i]=0
for j in range(1,len(A)):
c[A[j]]=c[A[j]]+1
for i in range(1,k+1):
c[i]=c[i]+c[i-1]
for j in range(len(A),0,-1):
B[c[A[j]]]=A[j]
c[A[j]]=c[A[j]]-1
#include
class bucketSort(object):
def insertSort(self,a):
n=len(a)
if n:
pass
for i in range(1,n):
key=a[i]
j=i-1
while keyand j>=0:
a[j+1]=a[j]
j-=1
a[j+1]=key
def sort(self,a):
n=len(a)
s=[[] for i in xrange(n)]
for i in a:
s[int(i*n)].append(i)
for i in s:
self.insertSort(i)
return [i for j in s for i in j]
def __call__(self,a):
return self.sort(a)
下一篇:排序算法-希尔排序