public class Test{
public static void main(String[] args){
int[] a = {3, 2, 5, 21}; // created an array with 4 elements
int b,c;
for (b=0; b<=2; b++)//for loop that will have 3 iterations
{
if (a[b] < a[b+1])
{
c=a[b];//this
a[b] = a[b+1];//is
a[b+1] = c;//swapping
}
}
for(b=0; b<4; b++)
{
System.out.println(a[b]);
}
}
}
输出:
3
5
21
2
当我写下来时我得到了什么:
3
5
21
21
有人可以告诉我如何在我的想法中接近它吗?
答案 0 :(得分:3)
如果你真的想要追踪程序,你可以手动循环第一个for
的每次迭代(第二个循环只打印a
的内容。)
在循环开始之前,a
成立
{3, 2, 5, 21}
第一次迭代(b = 0
):
a[0]
不小于a[1]
,所以我们什么都不做。
第二次迭代(b = 1
):
a[1]
小于a[2]
,因此我们将它们互换。现在a
持有
{3, 5, 2, 21}
第三次迭代(b = 2
):
a[2]
小于a[3]
,因此我们将它们互换。现在a
持有
{3, 5, 21, 2}
随后将被打印出来。
答案 1 :(得分:1)
嗯,代码总是输出a
的初始元素,可能是置换的。因此,您的期望可能不正确,因为它丢失2
并使21
出现两次。
答案 2 :(得分:1)
你在第3次迭代中输了,所以我会从那里开始。
数组为{3, 5, 2, 21}
。
b = 2
if (a[b] < a[b+1])
相当于if (2 < 21)
,这是true
,所以......
c=a[b];//this
- &gt; c = 2
a[b] = a[b+1];//is
- &gt; a[2] = 21
a[b+1] = c;//swapping
- &gt; a[2+1] = 2
现在a[2] = 21
和a[3] = 2
,最后一个数组是:
{3, 5, 21, 2}
答案 3 :(得分:0)
每次运行完整的外部循环时,最终会得到数组末尾的下一个最小元素。因此,当您在数组末尾以2(作为第一个最小元素)结束时,您只运行循环。
正如其他人所提到的,如果你想让它完整排序,那么你需要更多的主循环迭代来完成排序(n-1,其中n是数组的长度,所以在这种情况下你会需要运行循环3次)。