區別於比較排序需要元素進行相互比較,計數排序僅僅通過元素個數確定它在排序結果中的位置。
代碼實現
實在是不想用數組了,這次用方便易操作的vector代替。
/*計數排序*/
vector<int> counting_sort(vector<int> array,int k) //k表示數組中最大元素,output爲輸出
{
vector<int> temp(k+1,0);//臨時數組,存放個數
vector<int> output(array.size(), 0);//初始化輸出
for (int i = 0; i < array.size(); i++) {
temp[array[i]] += 1; //計算次數
}
for (int i = 1; i < temp.size(); i++)
{
temp[i] += temp[i - 1]; //計算個數
}
for (int i = array.size()-1; i >=0; i--)
{
output[temp[array[i]]-1] = array[i]; //放到對應位置上
temp[array[i]] -= 1; //個數剪1
}
return output;
}
測試一下
int main()
{
vector<int> array = { 2,5,3,0,2,3,0,3 };
vector<int> output;
output=counting_sort(array,5);
for each (int i in output)
{
cout << i << " ";
}
}
輸入仍然和書本上的例子相同,輸出:
0 0 2 2 3 3 3 5