计数排序

  1. 计数排序

计数排序

  • 定义:
    • 计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。(On+k)
  • 代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#################数字排序#############
def countSort(arr):
# 输出序列
if max(arr) > len(arr):
n = max(arr) + 1
else:
n = len(arr) + 1
output = [0 for i in range(n)]
# 计数序列
count = [0 for i in range(n)]
for i in arr:
count[i] += 1
for i in range(len(arr)):
count[i + 1] += count[i]
print(count)
for i in range(len(arr)):
# 下标从0开始
output[count[arr[i]] - 1] = arr[i]
count[arr[i]] -= 1
return (output[:len(arr)])

arr = [5,6,3,2,1,2,0,8,0]
ans = countSort(arr)
print(ans)
#################字母排序##################
def countSort(arr):
n = len(arr)
# 输出序列
output = [0 for i in range(256)]
# 计数序列
count = [0 for i in range(256)]
ans = ["" for i in range(n)]
for i in arr:
count[ord(i)] += 1
for i in range(256):
count[i] += count[i - 1]
for i in range(n):
# 下标从0开始
output[count[ord(arr[i])] - 1] = arr[i]
count[ord(arr[i])] -= 1
for i in range(len(arr)):
ans[i] = output[i]
return ans


arr = "wwwrunoobcom"
ans = countSort(arr)
print("字符数组排序 %s" % ("".join(ans)))

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com

×

喜欢就点赞,疼爱就打赏