欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 中文字幕日韩一区二区 | 国产精品久久久久久久久久红粉 | 国产目拍亚洲精品区一区 | 丁香久久 | 欧美成人一区二区三区在线视频 | 日韩版码免费福利视频 | 亚洲精品一区二区三区不 | 日韩在线观看一区二区不卡视频 | 国产欧美精品一区二区三区 | 国产精品第一区第27页 | 欧美视频国产 | 欧美国产精品一区二区 | 国产一级毛片夜一级毛片 | 欧美 日韩 中文字幕 | 懂色一区二区三区免费观看 | 成人欧美一区二区三区视频xxx | 国产成在线观看免费视频 | 欧美成人欧美激情欧美风情 | 国产乱码一区二区三区 | 成人精品视频在线观看 | a视频免费 | 国产精品久久久久久久久久久久冷 | 在线观看视频一区二区 | 婷婷视频网站 | 午夜直播在线 | 一级黄色片播放 | 中文字幕一区二区三区四区 | 国产日韩欧美在线观看 | 午夜国产精品视频在线 | 69av亚洲 | 操天天操 | 91精品国产91久久久久久 | 一级女性黄色生活片 | www.五月婷婷 | 日韩色中色| 亚洲高清一区二区三区 | 精品国产日韩一区三区 | 中文字幕免费在线观看视频 | 亚洲国产欧美在线人网站 | 日韩中文一区二区三区 | 亚洲成人网页 |