我是初学程序员,我一直在尝试用Python创建自己的排序算法,我不明白为什么它只输出输入中存在的一些数字。我把调试打印到处都是为了解问题但仍然没有任何结果。代码应该找到并移动到最终数组中输入数组的最大数量,并且直到输入数组为空它,但它似乎在某个时刻停止。有一个人similar problem,但解决方案也不适用于我。这是代码:
array = [3, 6, 25, 4, 5, 24, 7, 15, 5, 2, 0, 8, 1] #just random numbers
output = []
while(len(array) > 0):
maximum = 0
for x in array:
maximum = max(maximum, x)
output.append(maximum)
tempArray = []
for x in array:
temp = array.pop()
if(temp < maximum):
tempArray.append(temp)
array = tempArray
print(output)
答案 0 :(得分:4)
问题在于:
for x in array:
temp = array.pop()
您正在修改您正在迭代的相同列表。这会给你带来麻烦。
答案 1 :(得分:0)
考虑当5是最大值时会发生什么(并且输入中有两个5)。一个5被添加到输出,其余的5个永远不会被添加到tempArray。
答案 2 :(得分:0)
要进行诊断,请在循环中放置一些调试打印,例如外部循环结束时的print(output, array)
。也许在内循环中更多。在看到问题后(每次内部迭代从数组中删除两件事情,这都有效。
array = [3, 6, 25, 4, 5, 24, 7, 15, 5, 2, 0, 8, 1] #just random numbers
output = []
while(array):
maximum = 0
for x in array:
maximum = max(maximum, x)
output.append(maximum)
tempArray = []
for x in array:
if(x < maximum):
tempArray.append(x)
array = tempArray
print(output)
当然,有更简单,更好的方法从数组中删除max,只删除max的一个副本而不是全部。