鴿巢排序算法描述和代碼舉例

//鴿巢排序
//適用條件:所有取值的範圍確定,並且在這個範圍內個元素的出現頻率較高。
//算法描述:爲取值範圍內的各個可能取到的元素建巢用一維數組表示,巢中
//    巢中存放該元素出現的個數(通過遍歷待排序數統計存入)。按照巢的
//    順序和巢中元素個數列出該有序序列。
//算法空間複雜度爲:S(1)時間複雜度爲:O(n)。

//例:20個非負數,其中每個數的取值範圍爲1~9。

#include<iostream>
#include<time.h>
using namespace std;
int myrand(int* src, int n)                      //隨機函數,隨機生成n個 0~9的數存入src數組中
{
    if(NULL == src||n < 0)         
    {
        cout << "err in args or 'n'" << endl;
        return 0;
    }
    else
    {
        srand(time(NULL));
        for(int i=0; i<n; i++)
        {
            src[i] = rand()%10;
        }
        return 1;
    }
}

void prin(const int* src, int n)                 //輸出數組中的前n個元素
{
    for(int i=0; i<n; i++)
        cout << src[i] << "  ";
    cout << endl;
}

void home_sort(int arg[], int ar, int ser[], int se) //排序函數
{
    int i,j,t =0;
    for(i=0; i<ar; i++)
        ++ser[arg[i]];
    for(i=0; i<se; i++)
    {
            for(j=0; j<ser[i]; j++)
            {
                arg[t] = i;
                ++t;
            }
    }
}

int main()
{
    int arg[20],se[10] = {0};
    if(myrand(arg,20))
        prin(arg,20);
    home_sort(arg, 20, se, 10);
    prin(arg, 20);    
    return 0;
}

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