计数排序
又叫桶排序,非比较排序,时间复杂度为O(n+k)
【输入描述】
输入两行。第一行输入数组大小 n ,第二行输入 n 个数字。
【输出描述】
输出一行。输出排序后的数字。
【输入样例】
8
7 13 4 5 8 1 11 9
【输出样例】
1 4 5 7 8 9 11 13
【参考程序】
// 小牛编程
#include <bits/stdc++.h>
using namespace std;
// 计数排序
void countingSort(int arr[], int n) {
if (n <= 0)
return;
// 找到数组中的最大值
int k = arr[0];
for (int i = 1; i < n; i++) {
k = max(k, arr[i]);
}
// 创建计数数组,大小为最大值 + 1
int *cnt = new int[k + 1];
memset(cnt, 0, (k + 1) * sizeof(int));
// 统计每个元素出现的次数
for (int i = 0; i < n; i++) {
cnt[arr[i]]++;
}
// 重新填充排序后的数组
int j = 0;
for (int i = 0; i <= k; i++) {
while (cnt[i] > 0) {
arr[j++] = i;
cnt[i]--;
}
}
}
int main() {
int n;
cin >> n;
int *arr = new int[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
// 计数排序
countingSort(arr, n);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}