概念:

计数排序是一种稳定的排序算法,它需要另外一个数组,这个数组的第i项是原数组中i出现的个数。通过统计数出现的个数,再把数一个个放回去,就实现了排序的效果。

缺点:会消耗内存,不适用最大值太大的数组

优点:比快速排序快,更能够节省时间复杂度

image

代码:

//顶级垃圾程序
//A very bad program
#include <bits/stdc++.h>
using namespace std;

int arr[100];
int n;
void CountSort(int arr[], int n){
	int maxn = INT_MIN, minn = INT_MAX, brr[10000 + 1], cnt = 0;
	memset(brr, 0, sizeof(brr));
	for (int i = 0; i < n; i++){
		brr[arr[i]]++;
		if (maxn < arr[i]) maxn = arr[i];
		if (minn > arr[i]) minn = arr[i];
	}
	for (int i = minn; i <= maxn; i++){
		if (brr[i]){
			while(brr[i]--){
				arr[cnt] = i;
				cnt++;
			}
		}
	}
}
int main(){
	cin >> n;
	for (int i = 0; i < n; i++) cin >> arr[i]; 
	CountSort(arr, n);
	for (int i = 0; i < n; i++) cout << arr[i] << " ";
	return 0;
}

例子

10
234 456 5673 3123 3595 222 6 7 23 195