c/c++實現桶排序

桶排序 -

實現線性排序,但當元素間值得大小有較大差距時會帶來內存空間的較大浪費。首先,找出待排序列中得最大元素max,申請內存大小爲max + 1的桶(數組)並初始化爲0;然後,遍歷排序數列,並依次將每個元素作爲下標的桶元素值自增1;最後,遍歷桶元素,並依次將值非0的元素下標值載入排序數列(桶元素>1表明有值大小相等的元素,此時依次將他們載入排序數列),遍歷完成,排序數列便爲有序數列。

時間複雜度:O(x*N)   穩定性:穩定

/*桶排序*/
void bucketSort(vector<int> &arr)
{
    int max = getMaxValue(arr);
    int *pBuf = new int[max + 1];

    memset(pBuf, 0, (max + 1)*sizeof(int));
    for (auto const i : arr)
        ++pBuf[i];

    for (int i = 0, j = 0; i <= max; ++i)
    {
        while (pBuf[i]--)
            arr[j++] = i;
    }
    delete []pBuf;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章