您的位置:首页 > 其它

计数排序

2015-04-19 21:50 211 查看
def counting_sort(L, start, end):
#用于计数,start表示L中最小的元素,end表示L中最大的元素
len_start_to_end = end - start + 1
c = [0 for i in range(len_start_to_end)]
N = len(L)
#统计每个元素出现的次数
for element in L:
c[element - start] += 1
#将c[L[i]]重置为小于L[i]的元素个数
for i in range(1,len_start_to_end):
c[i] = c[i] + c[i - 1]
b = [0 for i in range(N)]
for element in L:
b[c[element - start] - 1] = element
c[element - start] = c[element - start] - 1
L[:] = b[:]

if __name__ == '__main__':
L = [23,41,12,32,24,31,45,35,41,24,15]
counting_sort(L, 12, 45)
print L


时间复杂度Θ(k+n),k表示待排序元素最小值与最大值的范围,n表示元素个数。

当k非常大(远大于n)时,计数排序的效率就会下降。因此,计数排序适用于k值较小的情况。

计数排序具有稳定性(相等元素的相对位置不变)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  计数排序