算法導論:c++計數排序

區別於比較排序需要元素進行相互比較,計數排序僅僅通過元素個數確定它在排序結果中的位置。

這裏寫圖片描述

這裏寫圖片描述

代碼實現

實在是不想用數組了,這次用方便易操作的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章