最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語言實(shí)現(xiàn)基數(shù)排序解析及代碼示例

 更新時(shí)間:2017年12月18日 11:20:03   作者:GejinZ  
這篇文章主要介紹了c語言實(shí)現(xiàn)基數(shù)排序解析及代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。

1.

基數(shù)排序(radixsort)屬于“分配式排序”(distributionsort),又稱“桶子法”(bucketsort)或binsort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達(dá)到排序的作用。

2.基數(shù)排序的實(shí)現(xiàn)方法分為兩種:

最高位優(yōu)先(MostSignificantDigitfirst)法,簡稱MSD法:先按k1排序分組,同一組中記錄,關(guān)鍵碼k1相等,再對各組按k2排序分成子組,之后,對后面的關(guān)鍵碼繼續(xù)這樣的排序分組,直到按最次位關(guān)鍵碼kd對各子組排序后。再將各組連接起來,便得到一個(gè)有序序列。

最低位優(yōu)先(LeastSignificantDigitfirst)法,簡稱LSD法:先從kd開始排序,再對kd-1進(jìn)行排序,依次重復(fù),直到對k1排序后便得到一個(gè)有序序列。

3.LSD基數(shù)排序的原理及代碼實(shí)現(xiàn)如下:

第一步

假設(shè)原來有一串?dāng)?shù)值如下所示:

73,22,93,43,55,14,28,65,39,81

首先根據(jù)個(gè)位數(shù)的數(shù)值,在走訪數(shù)值時(shí)將它們分配至編號(hào)0到9的桶子中:

0
1 81
2 22
3 73 93 43
4 14
5 55 65
6
7
8 28
9 39

第二步

接下來將這些桶子中的數(shù)值重新串接起來,成為以下的數(shù)列:

81,22,73,93,43,14,55,65,28,39

接著再進(jìn)行一次分配,這次是根據(jù)十位數(shù)來分配:

0
1 14
2 22 28
3 39
4 43
5 55
6 65
7 73
8 81
9 93

第三步

接下來將這些桶子中的數(shù)值重新串接起來,成為以下的數(shù)列:

14,22,28,39,43,55,65,73,81,93

這時(shí)候整個(gè)數(shù)列已經(jīng)排序完畢;如果排序的對象有三位數(shù)以上,則持續(xù)進(jìn)行以上的動(dòng)作直至最高位數(shù)為止。

#include<cstdio> 
#include<cstring> 
#include<algorithm> 
using namespace std; 
 
int getDigitNum(int x){ 
  if(x == 0) return 1; 
  int res = 0; 
  while(x){ 
    res ++; 
    x /= 10; 
  } 
  return res; 
} 
void RadixSort(int data[], int n){ 
  //find the Maximum and its digit number 
  int Max = data[0]; 
  for(int i = 1; i < n; i++){ 
    if(Max < data[i]) Max = data[i]; 
  } 
  int maxNum = getDigitNum(Max); 
  //maxNum times radix sort 
  int divisor = 1; 
  for(int k = 0; k < maxNum; k++){ 
    vector<int> g[10];//g[i]中包含了"末位"數(shù)字是i的data[]數(shù)組中的元素 
    for(int i = 0; i < 10; i++) g[i].clear(); 
    for(int i = 0; i < n; i++){ 
      int tmp = data[i] / divisor % 10; 
      g[tmp].push_back(data[i]); 
    } 
    int cnt = 0; 
    for(int i = 0; i < 10; i++){ 
      for(int j = 0; j < g[i].size(); j++){ 
        data[cnt++] = g[i][j]; 
      } 
    } 
    divisor *= 10; 
  } 
} 
int main(){ 
  int Array[10] = {73,22,93,43,55,14,28,65,39,81}; 
  RadixSort(Array, 10); 
  for(int i = 0; i < 10; i++){ 
    printf("%d ", Array[i]); 
  } 
  printf("\n"); 
  return 0; 
} 

總結(jié)

以上就是本文關(guān)于c語言實(shí)現(xiàn)基數(shù)排序解析及代碼示例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • C語言sqrt函數(shù)的實(shí)例用法講解

    C語言sqrt函數(shù)的實(shí)例用法講解

    在本篇文章里小編給大家整理的是關(guān)于C語言sqrt函數(shù)的實(shí)例內(nèi)容以及用法詳解,需要的朋友們可以參考下。
    2020-02-02
  • C++的智能指針你真的了解嗎

    C++的智能指針你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的智能指針,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++實(shí)現(xiàn)井字棋游戲

    C++實(shí)現(xiàn)井字棋游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++ Boost Optional示例超詳細(xì)講解

    C++ Boost Optional示例超詳細(xì)講解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C語言例題之輸出1000以內(nèi)的所有完數(shù)

    C語言例題之輸出1000以內(nèi)的所有完數(shù)

    完數(shù)是一些特殊的自然數(shù),它所有的真因子(即除了自身以外的約數(shù))的和(即因子函數(shù)),恰好等于它本身,如果一個(gè)數(shù)恰好等于它的因子之和,則稱該數(shù)為“完數(shù)”,這篇文章主要給大家介紹了關(guān)于C語言例題之輸出1000以內(nèi)的所有完數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • C語言詳盡圖解函數(shù)棧幀的創(chuàng)建和銷毀實(shí)現(xiàn)

    C語言詳盡圖解函數(shù)棧幀的創(chuàng)建和銷毀實(shí)現(xiàn)

    我們知道c語言中函數(shù)都是被調(diào)用的,main函數(shù)里面能調(diào)用其他函數(shù),其實(shí)main函數(shù)也是被別的函數(shù)調(diào)用的,下面通過本文給大家分享c語言函數(shù)棧幀的創(chuàng)建和銷毀過程,一起看看吧
    2022-05-05
  • C語言實(shí)現(xiàn)線性表的基本操作詳解

    C語言實(shí)現(xiàn)線性表的基本操作詳解

    線性表是最基本、最簡單、也是最常用的一種數(shù)據(jù)結(jié)構(gòu)。一個(gè)線性表是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列,這篇文章帶你學(xué)習(xí)如何通過C語言實(shí)現(xiàn)線性表的順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)
    2021-11-11
  • VC中Tab control控件的用法詳細(xì)解析

    VC中Tab control控件的用法詳細(xì)解析

    以下是對VC中Tab control控件的用法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下哦
    2013-09-09
  • C語言實(shí)現(xiàn)二叉樹的示例詳解

    C語言實(shí)現(xiàn)二叉樹的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C語言中二叉樹的算法實(shí)現(xiàn)以及二叉樹的遍歷算法與應(yīng)用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-06-06
  • C語言二維數(shù)組運(yùn)用實(shí)現(xiàn)掃雷游戲

    C語言二維數(shù)組運(yùn)用實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言二維數(shù)組運(yùn)用實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評論

唐海县| 无棣县| 郓城县| 麟游县| 鄢陵县| 安化县| 禹州市| 沭阳县| 城口县| 泽州县| 太仆寺旗| 大同市| 麻城市| 晴隆县| 开封市| 茶陵县| 肥西县| 景泰县| 赣州市| 阿拉善盟| 阿巴嘎旗| 宁津县| 棋牌| 马尔康县| 如东县| 临武县| 灵寿县| 贺州市| 马边| 济南市| 淳安县| 高要市| 石门县| 鄱阳县| 绵竹市| 清涧县| 封丘县| 盐城市| 浪卡子县| 安阳县| 太和县|