计数排序,时间复杂度为的算法。
稳定的排序:
def count_sort(li, max_count=100):
count = [0 for _ in range(max_count+1)]
for val in li:
count[val] += 1
li.clear()
for i,x in enumerate(count):
for i in range(val):
li.append(ind)
思路十分简单,以前做过什么班长的竞选,会有一个唱票环节,把每一个数都理解成一个竞选者,所以我们设立一个单独的列表为count,来进行计数,然后直接把计数结果导出就可以,十分讨巧的一个方法。
count = [ 0 for _ in range(max_count+1)] 代码的含义就是生成一个跟原数组一样的数组,值全为0
这里的max_count 是我们已知的在数组中最大的那个数。适合排列比如100以内的数或者你知道已知数据并且为可知数的排序。
def bucker_sort(li, n=100, max_num=10000):
buckets = [[] for _ in range(n)] # 创建桶
for var in li:
i = min(var // ( max_num // n ), n-1) # i 表示var放那个桶里面
buckets[i].append(var) # 放进桶里
#保持桶内顺序
for j in range(len(buckets[i])-1, 0,-1):
if buckets[i][j]< buckets[i][j-1]:
buckets[i][j],buckets[i][j-1] = buckets[i][j-1],buckets[i][j]
else:
break
sorted_li = []
for buc in buckets:
sorted_li.extend(buc)
return sorted_li
桶排序的表现取决于数据的分布,
本文介绍了两种稳定的排序算法:计数排序和桶排序。计数排序通过为每个可能的输入值创建计数列表来实现排序,适合于已知最大值且范围有限的数据。桶排序则将数据分配到多个桶中,每个桶内部进行排序,最后合并所有桶以得到排序结果,其效率依赖于数据分布。这两种方法在特定场景下能提供高效的排序解决方案。
9495

被折叠的 条评论
为什么被折叠?



