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

隨感而發

雜七雜八

統計

留言簿(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>
            欧美日韩情趣电影| 久久综合一区| 国产一区二区三区四区在线观看 | 久久亚洲影音av资源网| 欧美一区二区三区喷汁尤物| 午夜在线观看免费一区| 久久久久久久一区二区三区| 久久久亚洲高清| 欧美成人中文| 99在线视频精品| 亚洲女女做受ⅹxx高潮| 久久国产精品高清| 欧美精品xxxxbbbb| 国产精品美女在线| 精品91在线| 亚洲性色视频| 久久中文久久字幕| 亚洲精品一区二区三区福利| 亚洲免费一级电影| 噜噜爱69成人精品| 国产精品第十页| …久久精品99久久香蕉国产| 亚洲免费观看在线观看| 午夜精品99久久免费| 久久手机免费观看| 亚洲另类一区二区| 久久国产精品久久久久久电车| 免费亚洲婷婷| 国产偷国产偷亚洲高清97cao| 亚洲国产精品久久久久秋霞影院| 亚洲淫性视频| 最新亚洲电影| 亚洲一区二区不卡免费| 女人天堂亚洲aⅴ在线观看| 国产精品视频你懂的| 亚洲精品欧美| 老鸭窝亚洲一区二区三区| 一本色道久久综合一区| 欧美1区3d| 黄色国产精品| 欧美一乱一性一交一视频| 国产综合久久久久影院| 亚洲精一区二区三区| 久久免费少妇高潮久久精品99| 日韩视频免费在线观看| 久久综合成人精品亚洲另类欧美| 国产精品一区二区欧美| 一区二区日韩伦理片| 模特精品在线| 久久精品在线| 国产亚洲毛片在线| 午夜精品网站| 亚洲午夜未删减在线观看| 欧美日本免费| 亚洲图片激情小说| 亚洲美女视频在线免费观看| 欧美激情视频一区二区三区免费 | 欧美日韩免费高清一区色橹橹| 伊人久久亚洲影院| 久久久国产一区二区| 午夜影院日韩| 国产欧美在线| 久久精品国产综合精品| 午夜免费日韩视频| 国产曰批免费观看久久久| 欧美有码在线视频| 欧美一区二区高清| 欧美在线视频观看| 国产精品夫妻自拍| 亚洲男女自偷自拍| 在线视频你懂得一区| 欧美日韩综合视频| 亚洲一区二区欧美日韩| 亚洲深夜福利网站| 国产农村妇女精品一二区| 午夜精品久久久久久久久| 亚洲综合首页| 国产最新精品精品你懂的| 麻豆久久久9性大片| 免费成人av资源网| 夜夜爽99久久国产综合精品女不卡| 亚洲国产欧美一区二区三区同亚洲 | 黄色另类av| 美女精品视频一区| 在线观看亚洲精品视频| 欧美高清在线一区| 欧美另类视频| 欧美亚洲免费高清在线观看| 西西人体一区二区| 一区在线视频| 亚洲精品老司机| 国产精品久久久久久影院8一贰佰| 欧美亚洲在线视频| 久久久久久久久久久成人| 久久在线精品| 亚洲天堂男人| 久久婷婷国产综合国色天香| 日韩天堂在线观看| 香蕉久久夜色精品国产| 亚洲国产影院| 亚洲欧美日产图| 亚洲国产99精品国自产| 亚洲一区精品在线| 亚洲看片网站| 国产一区二区三区在线观看免费| 欧美高清免费| 国产精品国产精品国产专区不蜜| 欧美日韩国产小视频在线观看| 亚洲最黄网站| 久久精品人人爽| 亚洲免费在线播放| 欧美暴力喷水在线| 久久九九久精品国产免费直播| 欧美黄网免费在线观看| 久久九九国产| 国产精品久久一区二区三区| 男人的天堂亚洲在线| 国产精品久久久久9999吃药| 亚洲大胆人体在线| 韩国福利一区| 亚洲日本电影| 久久国产精品72免费观看| 久久夜色精品国产噜噜av| 亚洲图片在线观看| 免费亚洲电影| 麻豆精品在线观看| 国产区欧美区日韩区| 亚洲美女精品久久| 亚洲人成人99网站| 久久久久国产成人精品亚洲午夜| 亚洲欧美国产精品专区久久| 欧美精品在线视频| 亚洲电影下载| 亚洲国产精品久久久久婷婷老年| 欧美资源在线| 欧美一级淫片播放口| 国产精品久久久久高潮| avtt综合网| 亚洲精品影院| 欧美日韩一区综合| 亚洲欧美综合v| 亚洲电影在线看| 亚洲免费在线观看| 亚洲欧美日韩另类精品一区二区三区| 女人色偷偷aa久久天堂| 免费成人av在线看| 在线成人激情| 欧美专区在线观看| 欧美专区在线播放| 国产精品国产三级国产aⅴ无密码| 一区二区三区久久久| 午夜精品久久久久久久99樱桃| 亚洲一区二三| 久久爱www久久做| 性欧美18~19sex高清播放| 久久精品中文字幕一区| 欧美激情视频在线播放| 欧美福利视频一区| 一区二区三区国产盗摄| 亚洲香蕉伊综合在人在线视看| 亚洲国产精品成人综合| 欧美影院视频| 亚洲国产成人porn| 亚洲免费在线视频一区 二区| 亚洲一区制服诱惑| 欧美在线免费观看| 亚洲高清资源| 国产精品成人免费| 久久精品在线| 一区二区三区精品久久久| 久久国产精品久久久久久| 影音先锋久久资源网| 欧美日韩直播| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲欧美综合国产精品一区| 翔田千里一区二区| 欧美成人高清| 亚洲午夜视频在线观看| 久久久久久久久久久成人| 亚洲精品一区在线观看| 欧美综合第一页| 国产精品久在线观看| 国产综合在线看| 久久米奇亚洲| 久久精品99久久香蕉国产色戒| 久久久www| 亚洲国产精品一区二区久| 免费欧美在线| 欧美三级不卡| 午夜在线电影亚洲一区| 91久久精品日日躁夜夜躁欧美| 久久成人18免费网站| 欧美激情一区二区三区| 欧美黄色网络| 欧美日韩在线观看一区二区| 国产精品爱久久久久久久| 亚洲欧美三级伦理| 麻豆精品视频| 欧美一区三区三区高中清蜜桃| 久久综合色88|