📜  使用计数排序的中位数和众数(1)

📅  最后修改于: 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

以上为使用计数排序的中位数和众数的实现方法。

参考文献