计数排序算法,利用空间换取时间
//计数排序
#include<iostream>
#include<time.h>
//MAX为需要排序的数据中,最大的数值
#define MAX 40
void sort(int* input, int* output, int length){
int Temp[MAX] = { 0 };
for (int i = 0; i < length; i++){
Temp[input[i]]++;
}
for (int i = 1; i < MAX; i++){
Temp[i] = Temp[i] + Temp[i - 1];
}
for (int i = length - 1; i >= 0; i--){
output[Temp[input[i]] - 1] = input[i];
Temp[input[i]] -= 1;
}
}
int main(void){
int arr_input[20];
int arr_output[20];
srand(unsigned(time(NULL)));
std::cout << "input:";
for (int i = 0; i < 20; i++){
arr_input[i] = rand() % 40;
if (i != 0){
std::cout << ",";
}
std::cout << arr_input[i];
}
std::cout << std::endl;
memset(arr_output, 0, 20 * sizeof(int));
sort(arr_input, arr_output, 20);
std::cout << "output:";
for (int i = 0; i < 20; i++){
if (i != 0){
std::cout << ",";
}
std::cout << arr_output[i];
}
std::cout << std::endl;
return 0;
}