我的排序算法出了什么问题?

时间:2016-09-13 22:23:21

标签: python algorithm sorting

我是初学程序员,我一直在尝试用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)

3 个答案:

答案 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的一个副本而不是全部。