基数排序(Python实现出现的奇怪问题???)

学Python时间不长,试着用Python写个基数排序做练习,出现了奇怪的问题,最后用循环赋值,就没用问题了,纠结..... 

还是不知道为啥出现这个问题,明明赋值后打印结果也显示赋值成功了,为啥再次进循环就值不对了

## 基数排序
def MaxBit(arr):
    Len = len(arr)
    maxVal = arr[0]
    for i in range(Len):
        if maxVal < arr[i]:
            maxVal = arr[i]
    max_bit = 1
    while maxVal/10:
        max_bit += 1
        maxVal /= 10
    
    return max_bit
    
def RadixSort(arr):
    Length = len(arr)
    maxBit = MaxBit(arr)        ## 获得数组中最大数的位数
    #tmpArr = [[] for i in range(10)]
    tmpArr = [0]*Length
    
    exp = 1
    for i in range(maxBit):
        tmpCount = [0]*10
        for j in range(Length):
            tmpCount[arr[j]/exp%10] += 1  # correct
        
        for j in range(1, 10):
            tmpCount[j] += tmpCount[j-1]
        
        for j in range(Length):
            tmpCount[arr[Length-1-j]/exp%10] -= 1  
            tmpArr[tmpCount[arr[Length-1-j]/exp%10]] = arr[Length-1-j]
         
        print '赋值前:',arr
        arr = tmpArr
        print '赋值后:',arr
        exp *= 10
>>>  a = [21,12,3,41,145,67,87,213]

>>> RadixSort(a)

结果是:

赋值前: [21, 12, 3, 41, 145, 67, 87, 213]
赋值后: [21, 41, 12, 3, 213, 145, 67, 87]
赋值前: [213, 213, 213, 3, 213, 145, 67, 213]
赋值后: [213, 213, 213, 3, 213, 145, 67, 213]
赋值前: [145, 145, 145, 3, 213, 145, 213, 145]
赋值后: [145, 145, 145, 3, 213, 145, 213, 145]


def RadixSort(arr):
    Length = len(arr)
    maxBit = MaxBit(arr)        ## 获得数组中最大数的位数
    #tmpArr = [[] for i in range(10)]
    tmpArr = [0]*Length
    
    exp = 1
    for i in range(maxBit):
        tmpCount = [0]*10
        for j in range(Length):
            tmpCount[arr[j]/exp%10] += 1  # correct
        
        for j in range(1, 10):
            tmpCount[j] += tmpCount[j-1]
        
        for j in range(Length):
            tmpCount[arr[Length-1-j]/exp%10] -= 1  
            tmpArr[tmpCount[arr[Length-1-j]/exp%10]] = arr[Length-1-j]
            
        print '赋值前:',arr
        for j in range(Length):
            arr[j] = tmpArr[j]
        print '赋值后:',arr
        exp *= 10

>>>  a = [21,12,3,41,145,67,87,213]

>>> RadixSort(a)

结果是:

赋值前: [21, 12, 3, 41, 145, 67, 87, 213]
赋值后: [21, 41, 12, 3, 213, 145, 67, 87]
赋值前: [21, 41, 12, 3, 213, 145, 67, 87]
赋值后: [3, 12, 213, 21, 41, 145, 67, 87]
赋值前: [3, 12, 213, 21, 41, 145, 67, 87]
赋值后: [3, 12, 21, 41, 67, 87, 145, 213]


还是没搞明白为什么,可能对Python语言理解不够,不知道问题出在哪难过     搞这么个算法 搞了好几个小时,哎!!!虽然能出真确结果,但 最后发现还是不知道第一个版本为啥出问题,o(╯□╰)o


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值