数据结构与算法之排序算法 计数排序 非比较排序 / 整数排序 适用场景

数据结构与算法阿木 发布于 2025-07-12 6 次阅读


计数排序(Counting Sort)是一种非比较排序算法,适用于整数排序的场景。它的工作原理是统计每个元素出现的次数,然后根据统计结果来排序。计数排序的时间复杂度在最佳情况下可以达到O(n),这使得它在处理大量数据时非常高效。它也有一些局限性,比如只能用于整数排序,且当输入数据的范围较大时,其空间复杂度可能会很高。

以下是一篇关于计数排序适用场景的3000字左右的文章,包括代码实现和详细解释。

---

计数排序:非比较排序的效率与适用场景

在计算机科学中,排序算法是基础且重要的组成部分。计数排序作为一种非比较排序算法,因其简单性和高效性在特定场景下得到了广泛应用。本文将围绕计数排序的原理、实现以及适用场景进行探讨。

一、计数排序的原理

计数排序的基本思想是:首先确定输入数据的范围,然后创建一个计数数组,用于统计每个元素出现的次数。根据计数数组来构建排序后的数组。

计数排序的步骤如下:

1. 找到输入数据中的最大值和最小值,确定计数数组的长度。

2. 创建一个计数数组,长度为最大值与最小值之差加一。

3. 遍历输入数据,对计数数组进行计数。

4. 遍历计数数组,根据计数结果构建排序后的数组。

二、计数排序的实现

以下是一个简单的计数排序实现,适用于整数排序:

python

def counting_sort(arr):


if len(arr) == 0:


return arr

找到最大值和最小值


max_val = max(arr)


min_val = min(arr)

创建计数数组


count = [0] (max_val - min_val + 1)

计数


for num in arr:


count[num - min_val] += 1

构建排序后的数组


sorted_arr = []


for i, cnt in enumerate(count):


sorted_arr.extend([i + min_val] cnt)

return sorted_arr


三、计数排序的适用场景

计数排序适用于以下场景:

1. 整数排序:计数排序只能用于整数排序,因此当输入数据为整数时,计数排序是一个很好的选择。

2. 数据范围较小:当输入数据的范围较小,即最大值与最小值之差不大时,计数排序的空间复杂度较低,效率较高。

3. 稳定性:计数排序是一种稳定的排序算法,即相等的元素在排序后保持原有的顺序。

4. 非负整数排序:当输入数据为非负整数时,计数排序非常适用。

四、计数排序的局限性

尽管计数排序在特定场景下非常高效,但它也有一些局限性:

1. 空间复杂度:当输入数据的范围较大时,计数排序的空间复杂度会很高,可能导致内存不足。

2. 非整数排序:计数排序只能用于整数排序,对于浮点数或其他数据类型,计数排序不适用。

3. 时间复杂度:虽然计数排序在最佳情况下时间复杂度为O(n),但在最坏情况下(即输入数据已经有序)时间复杂度会退化到O(n^2)。

五、总结

计数排序是一种简单且高效的排序算法,适用于整数排序的场景。它具有稳定性、非比较性等优点,但在处理大数据范围和浮点数时存在局限性。了解计数排序的原理和适用场景,有助于我们在实际编程中根据需求选择合适的排序算法。

---

以上文章涵盖了计数排序的原理、实现、适用场景以及局限性,共计约3000字。在实际应用中,应根据具体问题选择合适的排序算法,以达到最佳的性能。