python swap sort没有给出正确的输出

时间:2016-04-03 05:07:19

标签: python arrays sorting if-statement for-loop

我正在尝试对从第二个数字开始的数组进行排序,然后查看前一个数字以查看前一个数字是否更大。如果是,我想交换数字,否则保持数字。目前我的代码不这样做。当我输入下面的数组时,唯一改变的是2变为11,在中间给我两个11。出了什么问题?

    int[] a = {1,2,3,4};
    OptionalInt maxValue = IntStream.of(a).max();
    System.out.println("Max Value: " + maxValue);

当我运行它时,傻事(a,N),我得到这个输出[7,3,11,11,6,16]。

1 个答案:

答案 0 :(得分:0)

您的代码有几个问题

start_pos = a[1]

如果您已经将start_pos作为函数的参数提供,那么为什么要在函数中重新初始化它。此外,如果a是您要排序的数组,为什么算法的start_pos是数组a本身的第二个元素?

for position in a:
        if a[start_pos-1] >= a[start_pos]:
            a[start_pos-1], a[start_pos] = a[start_pos], a[start_pos-1]
        else:
            a[start_pos-1] = a[start_pos]
        a_sorted.append(position)
        position += 1

for in循环将遍历数组aposition将获取数组元素的值。在您的示例中,position将按以下顺序获取值:

7, 3, 11, 2, 6, 16

我不明白为什么你在for循环结束时将位置递增1。再一次,您使用数组中的值来索引数组而不是索引本身。

因为在您的示例中,start_pos将取值a[1],即3,您的代码会比较[3]和[2],即2和11,然后进入else条件并生成[3] = a [2]因此你得到11位置2

您可能会对变量名称感到困惑。看看这对你有帮助。