我正在尝试对从第二个数字开始的数组进行排序,然后查看前一个数字以查看前一个数字是否更大。如果是,我想交换数字,否则保持数字。目前我的代码不这样做。当我输入下面的数组时,唯一改变的是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]。
答案 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
循环将遍历数组a
,position
将获取数组元素的值。在您的示例中,position
将按以下顺序获取值:
7, 3, 11, 2, 6, 16
我不明白为什么你在for循环结束时将位置递增1。再一次,您使用数组中的值来索引数组而不是索引本身。
因为在您的示例中,start_pos
将取值a[1]
,即3,您的代码会比较[3]和[2],即2和11,然后进入else条件并生成[3] = a [2]因此你得到11位置2
您可能会对变量名称感到困惑。看看这对你有帮助。