【问题描述】给你一个长度为m的整数数组nums,请用计数排序算法将该数组元素按非降序排列。 【输入形式】两行:第一行为m,第二行为数组元素(空格分隔)。 【输出形式】两行:第一行为分布值数组(空格分隔);第二行为数组nums非降序排序结果(空格分隔)。
时间: 2024-03-24 09:35:49 浏览: 82
计数排序的算法实现
好的,这里是计数排序的 Python 代码实现:
```python
def counting_sort(nums):
# Step 1: 计算每个元素出现的次数
max_num = max(nums)
count = [0] * (max_num + 1)
for num in nums:
count[num] += 1
# Step 2: 计算分布值
distribution = [0] * (max_num + 1)
distribution[0] = count[0]
for i in range(1, max_num + 1):
distribution[i] = distribution[i - 1] + count[i]
# Step 3: 排序
sorted_nums = [0] * len(nums)
for num in nums:
sorted_nums[distribution[num] - 1] = num
distribution[num] -= 1
return sorted_nums, count
m = int(input())
nums = list(map(int, input().split()))
sorted_nums, count = counting_sort(nums)
print(" ".join(str(c) for c in count))
print(" ".join(str(num) for num in sorted_nums))
```
计数排序的基本思想是,对于给定的输入序列中的每一个元素 x,确定该序列中值小于 x 的元素的个数,然后将 x 直接放到它在输出序列中的位置上。时间复杂度为 O(n+k),其中 n 是序列的长度,k 是序列中最大元素的大小。
阅读全文