计数排序:
#include <iostream>
using namespace std;
void counting_sort(int A[], int B[], int k, int size)
{
int* C = new int[size];
for (int i = 0; i < k + 1; ++i) // 第一步
{
C[i] = 0;
}
for (int j = 0; j < size; ++j) // 第二步
{
++C[A[j]];
}
for (int i = 1; i < k + 1; ++i) // 第三步
{
C[i] = C[i] + C[i - 1];
}
for (int j = size - 1; j > -1; --j) // 第四步
{
B[C[A[j]] - 1] = A[j];
--C[A[j]];
}
delete[] C;
}
int main()
{
int A[] = {2, 5, 3, 0, 2, 3, 0, 3};
// 数组A长度
int size = sizeof(A) / sizeof(A[0]);
// 排序数组 in/out
int *B = new int[size];
// 数组A最大值
int max = A[0];
for (int i = 0; i < size; ++i)
{
max = A[i] > max ? A[i] : max;
}
// 计数排序
counting_sort(A, B, max, size);
// 输出结果
for (int i = 0; i < size; ++i)
{
cout << B[i] << endl;
}
delete[] B;
return 0;
}