📅  最后修改于: 2023-12-03 15:07:33.936000             🧑  作者: Mango
这是一道关于数组和排序的编程问题。
给定一个长度为n的数组,其中元素取值范围在[0, k-1]之间。请你编写一个程序,实现对该数组的排序。
第一行输入两个整数n和k,表示数组长度和元素取值范围。
第二行输入n个整数,表示数组中的元素。
输出排好序后的数组。
本题可以使用计数排序(Counting Sort)来解决。
计数排序的原理是,对于给定的输入序列中的每一个元素 x,确定该序列中值小于 x 的元素的个数。一旦有了这个信息,你就可以将 x 直接放在最终的输出序列的正确位置上。
这个算法的实现过程可以分为三个步骤:
初始化一个计数数组,用于记录每个元素出现的次数。
遍历输入数组,统计每个元素出现的次数。
遍历计数数组,依次将元素放入输出数组中,输出数组就是排好序的数组。
下面是使用 Python 语言实现的解题代码:
def count_sort(arr, k):
count = [0] * k
for x in arr:
count[x] += 1
for i in range(1, k):
count[i] += count[i - 1]
result = [0] * len(arr)
for x in arr:
result[count[x] - 1] = x
count[x] -= 1
return result
n, k = map(int, input().split())
arr = list(map(int, input().split()))
sorted_arr = count_sort(arr, k)
print(*sorted_arr)
上述代码的时间复杂度为 O(n+k),其中 n 为输入数组的长度,k 为元素取值范围。
该算法是稳定的,因为在遍历输入数组时,对于相同的元素,在输出数组中它们的相对位置不变。