学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