示意图如下:
代码如下:
#include<iostream>
//#include<string>
using namespace std;
void counting_sort(int arr1[], int arr2[], int temp_arr[], const int arr_num, const int bigest_num)
{
for (int i = 0; i <= bigest_num; i++)
temp_arr[i] = 0;
for (int j = 0; j < arr_num; j++)
temp_arr[arr1[j]] = temp_arr[arr1[j]]+1;
for (int i = 1; i <= bigest_num; i++)
temp_arr[i] = temp_arr[i] + temp_arr[i - 1];
for (int j = arr_num - 1; j >= 0; j--)
{
arr2[temp_arr[arr1[j]]] = arr1[j];
temp_arr[arr1[j]] = temp_arr[arr1[j]]-1;
}
}
void main()
{
int arr1[] = { 2, 3, 5, 1, 4, 11, 6, 4, 8, 7 };
const int arr_num = sizeof(arr1) / sizeof(int);
for (int i = 0; i <arr_num; i++)
cout << arr1[i] << " ";
cout << endl;
int arr2[arr_num];//排序后的数组
int temp_arr[11+1];//临时数组,大小比arr1的最大元素大1
counting_sort(arr1, arr2, temp_arr, arr_num, 11);
for (int i = 1; i <= sizeof(arr2) / sizeof(int); i++)
cout << arr2[i] << " ";
cout << endl;
system("pause");
}