欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

基數排序(python)

系統 1937 0

10.基數排序

10.1 算法思想

基數排序是對桶排序的擴展。
第一類:最低位優先法,簡稱LSD法:先從最低位開始排序,再對次低位排序,直到對最高位排序后得到一個有序序列;
第二類:最高位優先法,簡稱MSD法:先從最高位開始排序,再逐個對各分組按次高位進行子排序,循環直到最低位。(位沒有數的話,補0)
這里以LSD為例,由于待排序元素每一位上的數字的取值范圍是0—9,因此每按照某一位,需要10個桶,這樣每一位上相同的數字會分配到一個桶里。

10.2 算法過程

基數排序(python)_第1張圖片
假設有一未排序數組:
3,44,38,5,47,15,36,26,27,2,46,4,19,50,48
首先根據個位數的數值,在遍歷數值時將它們分配至編號0到9的桶中:
0:50
1:
2: 2
3: 3
4: 44,4
5: 5,15
6:36,26,46
7:47,27
8:38,48
9:19,
第二步
接下來將這些桶中的數值重新串接起來,成為以下的數列:
50,2,3,44,4,5,15,36,26,46,47,27,38,48,19
接著再進行一次分配,這次是根據十位數來分配:
0:2,3,4,5
1:15,19
2:26,27
3:36,38
4:44,46,47,48
5:50,
6:
7:
8:
9:
第三步
接下來將這些桶子中的數值重新串接起來,成為以下的數列:
2,3,4,5,15,19,26,27,36,38,44,46,47,48,50
這時候整個數列已經排序完畢。
如果排序的對象有三位數以上,則持續進行以上的動作直至最高位數為止。

10.3 python代碼

            
              
                def
              
              
                getbit
              
              
                (
              
              num
              
                ,
              
              i
              
                )
              
              
                :
              
              
                # 獲取元素第i位的數
              
              
                return
              
              
                (
              
              num 
              
                %
              
              
                (
              
              i 
              
                *
              
              
                10
              
              
                )
              
              
                -
              
              
                (
              
              num 
              
                %
              
               i
              
                )
              
              
                )
              
              
                //
              
               i

              
                def
              
              
                getMax
              
              
                (
              
              numList
              
                )
              
              
                :
              
              
                # 獲取數組中的最大值
              
              
                if
              
              
                len
              
              
                (
              
              numList
              
                )
              
              
                ==
              
              
                1
              
              
                :
              
              
                return
              
               numList
              
                [
              
              
                0
              
              
                ]
              
              
    maxNum 
              
                =
              
               numList
              
                [
              
              
                0
              
              
                ]
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                len
              
              
                (
              
              numList
              
                )
              
              
                )
              
              
                :
              
              
                if
              
               numList
              
                [
              
              i
              
                ]
              
              
                >
              
               maxNum
              
                :
              
              
            maxNum 
              
                =
              
               numList
              
                [
              
              i
              
                ]
              
              
                return
              
               maxNum

              
                def
              
              
                radixSort
              
              
                (
              
              numList
              
                )
              
              
                :
              
              
                if
              
              
                len
              
              
                (
              
              numList
              
                )
              
              
                ==
              
              
                0
              
              
                or
              
              
                len
              
              
                (
              
              numList
              
                )
              
              
                ==
              
              
                1
              
              
                :
              
              
                return
              
               numList
    maxNum 
              
                =
              
               getMax
              
                (
              
              numList
              
                )
              
              
    bitCount 
              
                =
              
              
                0
              
              
    index 
              
                =
              
              
                1
              
              
                while
              
               maxNum 
              
                //
              
               index
              
                :
              
              
        bitCount 
              
                +=
              
              
                1
              
              
        index 
              
                *=
              
              
                10
              
              
    currentBit 
              
                =
              
              
                1
              
              
                # 統計一下最大值的bitCount(有多少位),因為比較多少次,是有最大值的位數決定的
              
              
                while
              
               currentBit 
              
                <=
              
              
                10
              
              
                **
              
              
                (
              
              bitCount
              
                -
              
              
                1
              
              
                )
              
              
                :
              
              
                # 開始循環的進行每一個位的比較
              
              
        res 
              
                =
              
              
                [
              
              
                ]
              
              
        buckets 
              
                =
              
              
                [
              
              
                [
              
              
                ]
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                10
              
              
                )
              
              
                ]
              
              
                # 桶排序
              
              
                for
              
               i 
              
                in
              
               numList
              
                :
              
              
            currentBitNum 
              
                =
              
               getbit
              
                (
              
              i
              
                ,
              
              currentBit
              
                )
              
              
            buckets
              
                [
              
              currentBitNum
              
                ]
              
              
                .
              
              append
              
                (
              
              i
              
                )
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                10
              
              
                )
              
              
                :
              
              
                for
              
               j 
              
                in
              
              
                range
              
              
                (
              
              
                len
              
              
                (
              
              buckets
              
                [
              
              i
              
                ]
              
              
                )
              
              
                )
              
              
                :
              
              
                res
              
                .
              
              append
              
                (
              
              buckets
              
                [
              
              i
              
                ]
              
              
                [
              
              j
              
                ]
              
              
                )
              
              
        numList 
              
                =
              
               res
        currentBit 
              
                *=
              
              
                10
              
              
                return
              
               numList
numlist 
              
                =
              
              
                [
              
              
                12
              
              
                ,
              
              
                3
              
              
                ,
              
              
                45
              
              
                ,
              
              
                3543
              
              
                ,
              
              
                214
              
              
                ,
              
              
                1
              
              
                ,
              
              
                4553
              
              
                ]
              
              
                print
              
              
                (
              
              radixSort
              
                (
              
              numlist
              
                )
              
              
                )
              
              
                # 輸出結果為:[1, 3, 12, 45, 214, 3543, 4553]
              
            
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91麻豆精品国产91久久久久久 | 青草视频网站在线观看 | 亚洲国产日韩a在线亚洲 | 91射射射 | 新神奇四侠免费完整版在线观看 | 欧美日韩视频在线第一区二区三区 | 亚洲国产二区 | 国产精品网址 | 中文字幕一区在线观看视频 | 一区二区三区视频在线观看 | 人人狠狠 | 亚洲综合干 | 久久久久久久 | 人人做人人爽人人爱 | 日本一区二区三区四区高清视频 | 亚洲精品久久九九热 | 国产精品一区二区在线 | 国产精品视频免费视频 | 成人免费午夜性视频 | 色综合天天综合中文网 | 99热久| 色中色在线视频 | 999在线| 久久精品中文字幕首页 | 在线二区人妖系列 | 91国内精品 | 久久精品一级 | 国产日韩久久久精品影院首页 | 亚洲天堂中文字幕 | 二级毛片视频 | 久久美乳 | 国产性色视频在线高清 | 色婷婷综合网 | 手机在线观看你懂得 | 小明www永久免费播放平台 | 男女交配视频网站 | 91在线激情 | 日本在线亚州精品视频在线 | 久草资源在线视频 | 91九色视频 | 黑色丝袜三级在线播放 |