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

CodeBeauty
春暖花開
posts - 6,comments - 3,trackbacks - 0

經典排序算法-計數排序CountSort
注意與基數排序區分,這是兩個不同的排序

計數排序的過程類似小學選班干部的過程,如某某人10票,作者9票,那某某人是班長,作者是副班長

大體分兩部分,第一部分是拉選票和投票,第二部分是根據你的票數入桶

看下具體的過程,一共需要三個數組,分別是待排數組,票箱數組,和桶數組

int *nData= new int[] ; //待排數組,以{ 6, 2, 4, 1, 5, 9} 為例

int *pCount = new int[Max{nData[i]+1}]; //票箱數組   ****特別注意pCount的長度問題Max>=nData.Length

int *pSort = new int[Max{nData[i]+1]; //桶數組

最后再看桶數組,先看待排數組和票箱數組

初始狀態,迭代變量i = 0時,待排數組[i] = 6,票箱數組[i] = 0,這樣通過迭代變量建立了數字與其桶號(即票數)的聯系

待排數組[ 6 2 4 1 5 9 ] i = 0時,可以從待排數組中取出6

票箱數組[ 0 0 0 0 0 0 ] 同時可以從票箱數組里取出6的票數0,即桶號

拉選票的過程

首先6出列開始拉選票,6的票箱是0號,6對其它所有數字說,誰比我小或與我相等,就給我投票,不然揍你

于是,2 4 1 5 分別給6投票,放入0號票箱,6得四票

待排數組[ 6 2 4 1 5 9 ]

票箱數組[ 4 0 0 0 0 0 ]

 

接下來2開始拉選票,對其它人說,誰比我小,誰投我票,不然弄你!于是1投了一票,其他人比2大不搭理,心想你可真二

于是2從1那得到一票

待排數組[ 6 2 4 1 5 9 ]

票箱數組[ 4 1 0 0 0 0 ]

 

再然后是,

4得到2和1的投票,共計兩票

1得到0票,沒人投他

5得到2,4,1投的三張票

9是最大,得到所有人(自己除外)的投票,共計5票(數組長度-1票)

 

投票完畢時的狀態是這樣

待排數組[ 6 2 4 1 5 9 ]

票箱數組[ 4 1 2 0 3 5 ]

入桶的過程

投票過程結束,每人都擁有自己的票數,桶數組說,看好你自己的票數,進入與你票數相等的桶,GO

6共計5票,進入5號桶

2得1票,進入1號桶,有幾票就進幾號桶

4兩票,進2號桶,5三票進3號桶,9有5票,進5號桶

待排數組[ 6 2 4 1 5 9 ]

票箱數組[ 4 1 2 0 3 5 ]

-----------------------

入桶前 [ 0 1 2 3 4 5 ] //里邊的數字表示桶編號

入桶后 [ 1 2 4 5 6 9 ] //1有0票,進的0號桶

排序完畢,順序輸出即可[ 1 2 4 5 6 9]

 

可以看到,數字越大票數越多,9得到除自己外的所有人的票,5票,票數最多所以9最大,

每個人最多擁有[數組長度減去自己]張票

1票數最少,所以1是最小的數,

計數排序同時兼有桶排的高效和快排的霸道,

 

///////////////////////////////////////////////
/*
  一共需要三個數組,分別是待排數組nData,票箱數組(計數數組)pCount,和桶數組(存儲結果數組)pSort.
*/

///////////////////////////////////////////////

#include 
<iostream>
using namespace std;

//輸出函數Output()
bool Output(int b[],int length)
{
    
for (int i=0;i<length;i++)
    
{
        cout
<<b[i]<<"  ";
       }

    cout
<<endl;
    
return true;
  }


//計數排序核心代碼
int CountSort(int* pData, int nLen)
{
    
//從待排序數組中找到最大值,以確定動態數組的長度,以盡量減少內存空間消耗
    int Max=pData[0];
    
for (int i= 1;i<nLen;i++)
    
{
        
if (Max<pData[i])
        
{
            Max
=pData[i];
        }

    }

    Max
++;   //數組中需要在pCout[Max]中存值,故nLen=max+1
    
//int* pCout = NULL;            //保存記數數據的指針
    
//pCout = (int*)malloc(sizeof(int) * nLen);    //申請空間-C實現
    int* pCout = new int[Max]; //C++實現
    
//初始化記數為0
    for (i = 0; i < Max; ++i)
    
{
        pCout[i] 
= 0;
    }

    
    
//記錄排序記數。在排序的值相應記數加1。
    for (i = 0; i < nLen; i++)
    
{
        pCout[pData[i]]
++;        //
    }

    
    
//確定不比該位置大的數據個數。
    for (i = 1; i < Max; ++i)
    
{
        pCout[i] 
+= pCout[i - 1];    //不比他大的數據個數為他的個數加上前一個的記數。
    }

    
    
//int* pSort = NULL;            //保存排序結果的指針
    
//pSort = (int*)malloc(sizeof(int) * nLen);    //申請空間
    int *pSort=new int[Max];
    
for (i = 0; i < nLen; ++i)
  
{
        
//把數據放在指定位置。因為pCout[pData[i]]的值就是不比他大數據的個數。
        
//為什么要先減一,因為pCout[pData[i]]保存的是不比他大數據的個數中包括了
        
//他自己,我的下標是從零開始的!所以要先減一。
        --pCout[pData[i]];    //因為有相同數據的可能,所以要把該位置數據個數減一。
        pSort[pCout[pData[i]]] = pData[i];     //保存待排數組元素          
    }

    
    
//排序結束,復制到原來數組中。
    for (i = 0; i < nLen; ++i)
  
{
        pData[i] 
= pSort[i];
    }

    
    
//最后要注意釋放申請的空間。
    
//free(pCout);   //C實現
    
//free(pSort);
    delete pSort;  //C++實現
    delete pCout;

    
return 1;
}


int main()
{
   
// int nData[10] = {8,6,3,6,5,8,3,5,1,0};
    
//動態輸入待排序數組
    int size_nData;
    cout
<<"Enter the numble of nData: size_nData=";
    cin
>>size_nData;
    cout
<<endl<<"Enter nData(size_nData values):";
    
int* nData=new int[size_nData];
    
for (int i=0;i<size_nData;i++)
    
{
          cin
>>nData[i];
      }

    
    cout
<<endl<<"former:"<<endl;
    Output(nData,size_nData);
    cout
<<endl<<"later:"<<endl;
    CountSort(nData, size_nData);

    Output(nData,size_nData);
    cout
<<endl;

    delete nData;
    
return 0;
}

改代碼已經成功運行過,歡迎大家進一步完善。

posted on 2012-05-09 10:19 代碼之美 閱讀(514) 評論(0)  編輯 收藏 引用 所屬分類: 經典排序算法(C/C++實現)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩图片一区| 亚洲欧美日韩一区二区在线| 久久国产精品久久精品国产| 中文亚洲字幕| 国产精品毛片在线看| 亚洲永久免费精品| 亚洲免费综合| 黑人巨大精品欧美一区二区| 久久综合狠狠综合久久激情| 久久亚洲春色中文字幕| 亚洲另类在线一区| 亚洲午夜激情在线| 国内成人精品2018免费看| 女同一区二区| 欧美视频中文字幕在线| 欧美在线免费| 免费中文日韩| 欧美肉体xxxx裸体137大胆| 亚洲永久免费视频| 久久久久91| 99精品欧美| 午夜精品婷婷| 亚洲黄色片网站| 亚洲少妇自拍| 在线观看欧美| 亚洲一区bb| 亚洲国产黄色| 亚洲一区在线观看视频| 亚洲国产第一页| 亚洲一区二区久久| 亚洲片区在线| 久久国产成人| 亚洲视频高清| 麻豆成人在线| 久久精品视频播放| 欧美日韩精品在线| 美女免费视频一区| 国产精品网站视频| 91久久精品国产91久久| 国产日韩三区| 日韩西西人体444www| 亚洲大片免费看| 亚洲女人小视频在线观看| 亚洲精品网站在线播放gif| 午夜一区二区三视频在线观看| 亚洲毛片网站| 老色批av在线精品| 久久精品亚洲精品| 国产精品女主播一区二区三区| 亚洲电影成人| 亚洲二区免费| 欧美在线视频播放| 午夜精品成人在线| 欧美一区二区三区在线| 亚洲尤物在线视频观看| 欧美日韩国产一区二区三区| 欧美成人免费视频| 极品日韩久久| 久久精品欧美日韩| 久久精品一区| 国产亚洲毛片| 亚洲欧美电影院| 欧美一区二区精美| 久久久久久一区| 久久婷婷麻豆| 国产在线拍偷自揄拍精品| 一本色道88久久加勒比精品| 夜夜嗨一区二区三区| 欧美成人资源网| 亚洲国产一区二区三区在线播| 1000部国产精品成人观看| 久久国产精品99精品国产| 久久精品99无色码中文字幕| 国产欧美日韩精品a在线观看| 亚洲字幕在线观看| 久久精品综合| 亚洲成人直播| 欧美激情精品久久久久久免费印度 | 亚洲视频播放| 欧美一区二区在线免费播放| 国产精品无码永久免费888| 午夜精品久久久久| 玖玖玖国产精品| 亚洲欧洲精品一区二区三区不卡| 麻豆精品网站| 日韩写真在线| 久久成人免费电影| 亚洲国产精品专区久久| 欧美激情视频免费观看| 一区二区三区久久| 久久婷婷影院| 中日韩高清电影网| 国产欧美日韩一区二区三区| 久久久久久伊人| 亚洲靠逼com| 久久精品欧美日韩| 亚洲人成毛片在线播放女女| 欧美日韩一区免费| 欧美淫片网站| 99精品国产一区二区青青牛奶| 欧美一区二区视频免费观看| 在线观看日韩av| 欧美午夜精品| 久久在线免费| 中文成人激情娱乐网| 免费中文日韩| 先锋a资源在线看亚洲| 有坂深雪在线一区| 国产精品久久77777| 久久亚洲精选| 亚洲综合不卡| 亚洲欧洲在线看| 久久久久成人精品| 亚洲一区免费看| 亚洲啪啪91| 好吊妞这里只有精品| 欧美三区美女| 免费看成人av| 久久精品中文| 亚洲欧美日韩精品久久亚洲区| 亚洲国产精品一区二区久| 久久精品91久久久久久再现| 一区二区日韩免费看| 亚洲电影在线播放| 黄色成人在线观看| 国产精品久久久久久久午夜| 欧美电影免费观看大全| 久久久午夜电影| 性色av一区二区三区红粉影视| 日韩亚洲精品电影| 亚洲国产精品第一区二区| 久久蜜桃资源一区二区老牛| 亚洲欧美一区二区三区久久 | 国产亚洲欧美日韩一区二区| 欧美日韩在线播| 欧美a级片一区| 久久在线精品| 卡通动漫国产精品| 久久蜜臀精品av| 欧美一区二区三区的| 亚洲综合精品一区二区| 亚洲天堂第二页| 亚洲一区二区av电影| 亚洲视频欧美视频| 亚洲图色在线| 午夜精品久久久久久99热软件| 一区二区三区精密机械公司| 亚洲最新色图| 亚洲少妇在线| 一本色道久久综合狠狠躁篇怎么玩 | 国产亚洲一区精品| 国产三级精品在线不卡| 国产欧美日韩精品在线| 国产偷国产偷精品高清尤物| 国产日韩在线不卡| 国产字幕视频一区二区| 国产尤物精品| 亚洲国产视频a| 亚洲最新在线视频| 亚洲午夜精品久久久久久app| 亚洲网站在线播放| 性做久久久久久久久| 久久久国产精品亚洲一区 | 久久激情中文| 另类尿喷潮videofree| 欧美福利电影网| 亚洲精品在线看| 亚洲免费在线播放| 久久综合成人精品亚洲另类欧美| 久久夜色精品国产欧美乱极品| 欧美成人亚洲成人| 国产精品爱久久久久久久| 国产欧美一区二区在线观看| 在线国产日韩| 亚洲一级黄色片| 久久久一区二区三区| 最近看过的日韩成人| 亚洲欧美久久| 欧美高清视频一区| 国产精品视频一区二区高潮| 国产夜色精品一区二区av| 最新成人av网站| 午夜在线视频观看日韩17c| 麻豆精品在线播放| 一本一道久久综合狠狠老精东影业| 午夜精品亚洲| 欧美日韩精品一本二本三本| 国产亚洲一区二区三区| 日韩网站在线看片你懂的| 久久精品日韩一区二区三区| 亚洲精品麻豆| 久久久精品一品道一区| 欧美日韩免费在线| 亚洲成人在线网站| 久久国产免费看| 亚洲啪啪91| 久久久久国色av免费观看性色| 欧美日韩亚洲一区二区三区| 在线播放亚洲| 久久国产免费看|