📅  最后修改于: 2023-12-03 14:49:57.706000             🧑  作者: Mango
计数排序是一种非比较排序算法,其核心思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素个数。具体实现过程是开辟一个新的数组,数组下标表示输入序列的每一个元素,数组元素表示该元素出现的次数。通过遍历输入序列,统计出每个元素出现的次数,最后组成排序后的序列。
中位数可以简单地理解为一个序列的中间值。采用计数排序得到排序后的序列后,取出排序后的中间元素即为中位数。
def count_sort(arr):
length = len(arr)
count_arr = [0 for _ in range(256)] # assuming input array contains only numbers
sorted_arr = [None] * length
for i in range(length):
count_arr[arr[i]] += 1
for i in range(1, len(count_arr)):
count_arr[i] += count_arr[i-1]
for i in range(length-1, -1, -1):
sorted_arr[count_arr[arr[i]] - 1] = arr[i]
count_arr[arr[i]] -= 1
return sorted_arr
def median(arr):
sorted_arr = count_sort(arr)
length = len(sorted_arr)
if length % 2 == 0:
return (sorted_arr[length // 2 - 1] + sorted_arr[length // 2]) / 2
else:
return sorted_arr[length // 2]
众数是一个序列中出现次数最多的元素。采用计数排序,建立一个记录每个元素出现次数的数组。遍历输入序列,统计每个元素出现的次数,最后遍历统计数组,找到出现次数最多的元素即为众数。
def mode(arr):
count_arr = [0 for _ in range(256)]
for i in arr:
count_arr[i] += 1
max_count = max(count_arr)
mode_arr = []
for i in range(len(count_arr)):
if count_arr[i] == max_count:
mode_arr.append(i)
return mode_arr
以上为使用计数排序的中位数和众数的实现方法。