青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨感而發

雜七雜八

統計

留言簿(13)

閱讀排行榜

評論排行榜

基數排序

今天學了基數排序,據說他的時間復雜度也是O(n),他的思路就是:
沒有計數排序那么理想,我們的數據都比較集中,都比較大,一般是4,5位。基本沒有小的數據。
那我們的處理很簡單,你不是沒有小的數據嘛。我給一個基數,例如個位,個位都是[0-10)范圍內的。先對他進行歸類,把小的放上面,大的放下面,然后個位排好了,在來看10位,我們也這樣把小的放上面,大的放下面,依次內推,直到最高位排好。那么不就排好了嗎?我們只需要做d(基數個數)的循環就可以了。時間復雜度相當于O(d * n) 因為d為常量,例如5位數,d就是5.所以近似為O(n)的時間復雜度。這次自己寫個案例:

最初的數據

排好個位的數據

排好十位的數據

排好百位的數據

981

981

725

129

387

753

129

387

753

955

753

456

129

725

955

725

955

456

456

753

725

387

981

955

456

129

387

981

這里只需循環3次就出結果了。

<!--[if !supportLists]-->3.       <!--[endif]-->但是注意,我們必須要把個位排好。但是個位怎么排呢?這個是個問題。書上說的是一疊一疊的怎么合并,我是沒有理解的。希望知道的有高手教我一下。

我是用的一個計數排序來排各位的,然后排十位。效率應該也低不到哪里去。呵呵。。

思路就這樣咯。奉上源代碼:

 

#include <stdio.h>
#include 
<stdlib.h>

//計數排序,npRadix為對應的關鍵字序列,nMax是關鍵字的范圍。npData是具體要
//排的數據,nLen是數據的范圍,這里必須注意npIndex和npData對應的下標要一致
//也就是說npIndex[1] 所對應的值為npData[1]
int RadixCountSort(int* npIndex, int nMax, int* npData, int nLen)
{
    
//這里就不用說了,計數的排序。不過這里為了是排序穩定
    
//在標準的方法上做了小修改。

    
int* pnCount  = (int*)malloc(sizeof(int)* nMax);        //保存計數的個數
    for (int i = 0; i < nMax; ++i)
    {
        pnCount[i] 
= 0;
    }
    
for (int i = 0; i < nLen; ++i)    //初始化計數個數
    {
        
++pnCount[npIndex[i]];
    }

    
for (int i = 1; i < 10++i)  //確定不大于該位置的個數。
    {
        pnCount[i] 
+= pnCount[i - 1];
    }

    
int * pnSort  = (int*)malloc(sizeof(int* nLen);    //存放零時的排序結果。

    
//注意:這里i是從nLen-1到0的順序排序的,是為了使排序穩定。
    for (int i = nLen - 1; i >= 0--i)
    {
        
--pnCount[npIndex[i]];        
        pnSort[pnCount[npIndex[i]]] 
= npData[i];
    }

    
for (int i = 0; i < nLen; ++i)        //把排序結構輸入到返回的數據中。
    {
        npData[i] 
= pnSort[i];
    }
    free(pnSort);                        
//記得釋放資源。
    free(pnCount);
    
return 1;
}

//基數排序
int RadixSort(int* nPData, int nLen)
{
    
//申請存放基數的空間
    int* nDataRadix    = (int*)malloc(sizeof(int* nLen);

    
int nRadixBase = 1;    //初始化倍數基數為1
    bool nIsOk = false//設置完成排序為false

    
//循環,知道排序完成
    while (!nIsOk)
    {
        nIsOk 
= true;
        nRadixBase 
*= 10;
        
for (int i = 0; i < nLen; ++i)
        {
            nDataRadix[i] 
= nPData[i] % nRadixBase;
            nDataRadix[i] 
/= nRadixBase / 10;
            
if (nDataRadix[i] > 0)
            {
                nIsOk 
= false;
            }
        }
        
if (nIsOk)        //如果所有的基數都為0,認為排序完成,就是已經判斷到最高位了。
        {
            
break;
        }
        RadixCountSort(nDataRadix, 
10, nPData, nLen);
    }

    free(nDataRadix);

    
return 1;
}

int main()
{
    
//測試基數排序。
    int nData[10= {123,5264,9513,854,9639,1985,159,3654,8521,8888};
    RadixSort(nData, 
10);
    
for (int i = 0; i < 10++i)
    {
        printf(
"%d ", nData[i]);
    }
    printf(
"\n");

    system(
"pause");
    
return 0;
}

 


posted on 2009-04-24 21:36 shongbee2 閱讀(13432) 評論(2)  編輯 收藏 引用 所屬分類: 數據結構和算法

評論

# re: 基數排序[未登錄] 2012-06-02 10:01 MICHAEL

你的這個程序有一定的問題
比如這組數據:
int nData[10] = {1046,2084,9046,12074,56,7026,8099,17059,33,1};
  回復  更多評論   

# re: 基數排序 2013-06-28 13:49 hum

試了下,確實有點問題,修改一下就好了。
修改前
if (nDataRadix[i] > 0)
{
nIsOk = false;
}
修改后:
if (nPData[i]/nRadixBase > 0)
{
nIsOk = false;
}  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            最新高清无码专区| 欧美一级成年大片在线观看| 一本色道久久| 亚洲精品网站在线播放gif| 在线精品观看| 亚洲美女在线一区| 一区二区三区日韩精品视频| 一区二区欧美在线观看| 亚洲欧美一区二区三区极速播放| 亚洲专区一区二区三区| 久久精品最新地址| 欧美激情第三页| 99精品视频免费观看| 亚洲一区欧美一区| 久久精品一级爱片| 欧美大片免费| 国产精品婷婷午夜在线观看| 韩国v欧美v日本v亚洲v| 亚洲精品久久在线| 西西裸体人体做爰大胆久久久| 久久99在线观看| 欧美aaa级| 一区二区三区国产精华| 亚洲国产精品va在线看黑人动漫 | 精品二区久久| 在线观看一区二区视频| 一区二区三区 在线观看视| 久久久久88色偷偷免费| 日韩视频免费看| 久久精品视频99| 欧美日韩网站| 亚洲国产合集| 欧美一级网站| 99精品免费| 欧美黄污视频| 亚洲电影有码| 欧美一区高清| 99精品视频免费观看视频| 久久人人爽国产| 国产精品综合久久久| 99re在线精品| 欧美成年人视频网站| 亚洲欧美一区二区精品久久久| 欧美国产第一页| 在线观看欧美日韩国产| 久久xxxx精品视频| 亚洲网站在线观看| 欧美午夜精品久久久久久超碰| 亚洲精品视频免费在线观看| 蘑菇福利视频一区播放| 欧美在线免费视屏| 国产伦精品一区二区三区视频孕妇 | 影音先锋另类| 久久精品天堂| 午夜精品一区二区三区在线| 国产精品hd| 亚洲午夜视频在线| 日韩一级黄色大片| 欧美日韩你懂的| 亚洲视频欧美视频| 中文在线资源观看网站视频免费不卡 | 久久亚洲图片| 久久不射中文字幕| 国产视频一区在线观看| 久久精品夜色噜噜亚洲a∨ | 亚洲欧洲久久| 久久综合精品国产一区二区三区| 韩国av一区二区三区在线观看 | 亚洲精品乱码| 亚洲黄色免费网站| 亚洲国产一区二区三区a毛片| 久久综合久久综合久久综合| 欧美在线短视频| 在线观看国产日韩| 欧美成人精品一区二区三区| 欧美国产视频在线| 亚洲视频一区| 亚洲欧美中文日韩在线| 国产一区观看| 美女精品视频一区| 欧美大色视频| 亚洲欧美在线播放| 欧美中日韩免费视频| 亚洲电影成人| 一区二区三区黄色| 国产欧美日韩伦理| 欧美福利在线观看| 国产精品国产三级国产专区53| 久久不射2019中文字幕| 久久中文字幕导航| 亚洲一区二区三区欧美| 久久精品一区二区国产| 亚洲乱码一区二区| 亚洲一区二区三区在线看| 精品va天堂亚洲国产| 日韩天堂在线观看| 一区二区在线观看av| 亚洲精选在线观看| 一区二区亚洲| 亚洲一区二区三| 亚洲二区在线观看| 亚洲综合精品一区二区| 亚洲人成在线播放| 亚洲欧美日韩一区二区三区在线观看 | 欧美日韩1区2区| 久久久一二三| 欧美三日本三级少妇三2023| 老司机午夜免费精品视频 | 久久精品久久99精品久久| 日韩小视频在线观看| 久久激情视频免费观看| 一区二区三区欧美在线| 久久影视三级福利片| 亚洲欧美日韩精品久久| 欧美国产日韩一区二区三区| 老司机凹凸av亚洲导航| 日韩亚洲精品在线| 欧美一级片一区| 亚洲综合日韩| 欧美日本一道本| 亚洲成人在线视频网站| 国产一区二区三区在线播放免费观看 | 欧美福利专区| 国产视频一区免费看| 亚洲精选中文字幕| 亚洲国产日韩综合一区| 欧美在线网站| 午夜精品久久久久久久99水蜜桃| 欧美精品色综合| 欧美高清视频一区二区| 精品盗摄一区二区三区| 久久精品最新地址| 久久久精品动漫| 国产一级揄自揄精品视频| 午夜精品福利在线观看| 欧美在线观看一区二区| 国产精品卡一卡二| 亚洲午夜精品在线| 亚洲综合三区| 国产精品视区| 香蕉av福利精品导航| 久久精品99国产精品日本| 国产一区二区三区免费观看| 久久国内精品自在自线400部| 久久久久久九九九九| 国产曰批免费观看久久久| 久久精品女人天堂| 欧美大尺度在线观看| 亚洲精品久久久久久一区二区| 欧美理论在线| 宅男噜噜噜66国产日韩在线观看| 亚洲欧美视频在线观看| 国产农村妇女精品一二区| 久久国产精品久久国产精品 | 亚洲一区二区成人在线观看| 亚洲在线播放| 国产亚洲永久域名| 免费视频一区二区三区在线观看| 亚洲高清久久| 亚洲视频一区二区| 国产亚洲激情视频在线| 鲁大师成人一区二区三区| 亚洲裸体视频| 久久久久成人网| 亚洲精品一区二区三| 国产精品二区影院| 久久精品在线免费观看| 亚洲精品视频二区| 久久国产精品久久国产精品 | 亚洲欧洲另类国产综合| 欧美日韩黄视频| 欧美一区二区三区久久精品茉莉花| 猫咪成人在线观看| 在线亚洲免费| 一区二区三区我不卡| 欧美日韩亚洲三区| 久久九九国产精品怡红院| 日韩一区二区久久| 麻豆久久久9性大片| 亚洲图片在线| 91久久久久久| 国产在线一区二区三区四区| 欧美精彩视频一区二区三区| 欧美伊人影院| 亚洲视频专区在线| 亚洲人成高清| 欧美凹凸一区二区三区视频| 欧美一区二区三区精品电影| 一本色道久久综合狠狠躁篇怎么玩 | 久久婷婷国产综合国色天香| 欧美一区二区三区免费观看 | 欧美电影在线播放| 亚洲欧美在线高清| 亚洲黄色片网站| 久久夜色精品国产欧美乱| 亚洲欧美日韩另类精品一区二区三区 | 欧美成人一区二区三区片免费| 欧美一区=区| 亚洲一区二区三区午夜| 99在线视频精品|