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

隨感而發

雜七雜八

統計

留言簿(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>
            中文精品99久久国产香蕉| 久久在线视频在线| 午夜国产精品视频免费体验区| 亚洲欧美一区二区精品久久久| 久久综合久久综合久久综合| 欧美黄色大片网站| 欧美一区二区三区免费看| 亚洲视频狠狠| 欧美成人情趣视频| 久久久综合精品| 国模 一区 二区 三区| 久久国产精品色婷婷| 久久久免费精品视频| 久久久久综合一区二区三区| 樱花yy私人影院亚洲| 欧美激情视频一区二区三区在线播放 | 99国产成+人+综合+亚洲欧美| 麻豆精品网站| 一区二区日韩| 性亚洲最疯狂xxxx高清| 狠狠色狠色综合曰曰| 亚洲黄色精品| 国产视频一区三区| 欧美高清视频免费观看| 国产精品视频第一区| 欧美色网在线| 久久久国产亚洲精品| 久久免费少妇高潮久久精品99| 亚洲三级电影在线观看| 一本色道久久综合亚洲精品小说| 欧美高清视频一区二区三区在线观看 | 亚洲美女电影在线| 亚洲天堂网在线观看| 午夜视频一区在线观看| 久久精品欧美| 亚洲第一区在线观看| 久久精品亚洲精品| 亚洲精品视频在线| 久久疯狂做爰流白浆xx| 国产精品高清在线观看| 亚洲精品欧洲| 国产精品99久久久久久久久| 欧美韩国一区| 美女网站久久| 欧美aⅴ一区二区三区视频| 欧美日韩综合在线免费观看| 亚洲线精品一区二区三区八戒| 欧美金8天国| 亚洲精品综合在线| 久久综合久久美利坚合众国| 在线一区二区三区四区| 欧美日韩在线播放一区| 午夜精品久久99蜜桃的功能介绍| 亚洲视频在线观看视频| 亚洲福利精品| 久久精品国产一区二区三区| 永久免费视频成人| 久久国产精品99久久久久久老狼| 老司机精品久久| 久久久99免费视频| 久久精品国产一区二区三区免费看| 麻豆精品在线视频| 久久久之久亚州精品露出| 一区二区在线视频观看| 美女亚洲精品| 国产精品护士白丝一区av| 激情欧美一区二区| 欧美制服丝袜| 亚洲人成高清| 亚洲大胆av| 美国十次了思思久久精品导航| 欧美多人爱爱视频网站| 99这里只有精品| 免费一级欧美在线大片| 亚洲福利视频专区| 嫩草成人www欧美| 国产精品毛片a∨一区二区三区|国 | 女同一区二区| 欧美一区二区三区免费大片| 激情亚洲成人| 欧美午夜视频| 欧美日韩一本到| 欧美刺激午夜性久久久久久久| 亚洲综合色丁香婷婷六月图片| 欧美国产极速在线| 久久午夜精品一区二区| 午夜精品一区二区三区在线| 亚洲精品在线观看免费| 18成人免费观看视频| 国产日韩欧美麻豆| 欧美国产先锋| 久久嫩草精品久久久精品一| 先锋影音国产精品| 欧美在线首页| 久久综合国产精品| 免费成人av| 91久久国产综合久久| 欧美在线999| 久久久久天天天天| 欧美成年人视频网站| 亚洲高清三级视频| 91久久久久久国产精品| 99riav久久精品riav| 亚洲免费观看高清在线观看| 欧美中文在线字幕| 欧美激情一二区| 亚洲精品国产精品国自产观看| 一本色道久久综合狠狠躁篇怎么玩| 99在线视频精品| 欧美主播一区二区三区| 亚洲欧美成人网| 欧美电影资源| 韩日在线一区| 9色国产精品| 久久亚洲精品一区二区| 亚洲另类黄色| 久久在线视频| 国产一区美女| 午夜欧美理论片| 久久综合一区| 欧美在线播放视频| 国产伦精品一区二区三区高清版| 亚洲国产一区在线| 久久综合五月天婷婷伊人| 巨乳诱惑日韩免费av| 欧美伊人久久| 国产欧美亚洲精品| 亚洲一区二区三区四区视频| 欧美激情精品久久久久| 久久久精品一区| 欧美激情第五页| 国产精品99久久久久久久久 | 欧美日本不卡| 一区二区三区四区五区在线| 亚洲国产精品悠悠久久琪琪 | 中文成人激情娱乐网| 亚洲一区日韩在线| 黄色成人在线观看| 亚洲伦理中文字幕| 国产一区二区视频在线观看| 欧美电影在线免费观看网站| 欧美日韩国产精品自在自线| 久久精品综合| 国产精品美女在线观看| 欧美成人综合网站| 国产精品久久久久免费a∨| 久久五月天婷婷| 国产精品美女久久久久久免费| 亚洲第一精品福利| 狠狠干综合网| 欧美亚洲一区二区在线观看| 一二三区精品| 欧美mv日韩mv国产网站| 久久久夜色精品亚洲| 国产精品国产馆在线真实露脸| 亚洲国产99精品国自产| 在线色欧美三级视频| 久久午夜精品一区二区| 久久精品国产一区二区电影| 国产精自产拍久久久久久蜜| 9色porny自拍视频一区二区| 亚洲美女视频在线免费观看| 蜜臀va亚洲va欧美va天堂| 欧美国产日本| 一本色道久久综合| 欧美午夜视频在线观看| 亚洲桃色在线一区| 国产精品99一区二区| 亚洲一区二区视频在线观看| 欧美主播一区二区三区| 红桃视频一区| 欧美精品一区二区三区在线看午夜 | 亚洲精品在线一区二区| 久久亚洲图片| 亚洲国产日韩欧美在线图片 | 亚欧成人精品| 国产精品五月天| 久久精品视频免费播放| 激情婷婷久久| 久久艳片www.17c.com| 亚洲国产欧美不卡在线观看| 国产精品99久久不卡二区| 国产精品美女久久久久久免费| 欧美一区二区在线看| 亚洲经典视频在线观看| 欧美制服丝袜第一页| 亚洲激情欧美激情| 国产酒店精品激情| 欧美日韩在线免费视频| 久久大逼视频| 亚洲一区成人| 亚洲国产aⅴ天堂久久| 欧美午夜精品久久久| 久久网站免费| 久久精品视频免费播放| 99在线精品视频| 亚洲人成在线观看| 米奇777在线欧美播放| 久久er精品视频| 一区二区三区|亚洲午夜|