计数排序假设n个输入元素中每一个都介于0到k之间的整数,此处k为某个整数,当k=O(n)时,计数排序的运行时间为O(n)
计数排序的基本思想就是对于每一个输入元素x,确定小于x的元素个数,利用这一信息就可以将x安放在最终输出数组的正确位置上。
在计数排序中,假设输入数组为A,排序后的输出数组为B,元素介于0和k之间
计数排序的基本思想就是对于每一个输入元素x,确定小于x的元素个数,利用这一信息就可以将x安放在最终输出数组的正确位置上。
在计数排序中,假设输入数组为A,排序后的输出数组为B,元素介于0和k之间
void count_sort(const vector<int>& A,vector<int>& B,const int& k)
{
vector<int> number(k+1,0);
for(int i = 0;i < A.size();i++)//计算每一个元素出现的次数
number[A[i]]++;
for (int i = 1;i <= k;i++)//计算每一个元素,保存小于等于其本身的元素的个数
number[i] += number[i-1];
for (int i = A.size()-1;i >= 0;i--)//根据小于等于其本身元素的个数,将该元素安插到正确位置,安插完一个后,小于等于其本身的元素个数减1
{
B[number[A[i]]-1] = A[i];
number[A[i]]--;
}
}