计数排序
前言
原理后续补齐。
代码
public static int[] countSort(int[] array)
{
// 取得计数排序范围
int max = array[0];
int min = array[0];
for (int i = 1; i < array.Length; i++)
{
if (array[i] > max)
{
max = array[i];
}
if (array[i] > min)
{
min = array[i];
}
}
int d = max - min;
// 将数组填充
int[] countArray = new int[d+1];
for (int i=0; i < array.Length; i++)
{
// 如果有某个数就加1
countArray[array[i]-min]++;
}
// 统计数组,每个是前面数组之和
for (int i=1;i<countArray.Length;i++)
{
countArray[i] += countArray[i - 1];
}
//开始排序
int[] sortedArray = new int[array.Length];
for (int i=array.Length-1;i>=0;i--)
{
sortedArray[countArray[array[i] - min]-1]=array[i];
countArray[array[i] - min]--;
}
return sortedArray;
}