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

来源:互联网 发布:winzip官网Windows系统 编辑:程序博客网 时间:2024/05/05 17:58

学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