我还是学生,我在Java中有一个作业,我必须对一个数组进行排序,该数组比较最后一个元素的第一个元素,直到数组从最高到最低排序。我已经做了一些算法,但它似乎跳过交换号2并继续到swap3。该程序应该像这样运行。
10 ,3,7,15, 9
10 ,3,7, 15 ,9
15 ,3, 7 ,10,9 - swap1
15 , 3 ,7,10,9
15, 3 ,7,10, 9
15, 9 ,7, 10 ,3 - swap2
15, 10 , 7 ,9,3
15,10, 7 ,9, 3
15,10, 7 , 9 ,3
15,10,9, 7 , 3 - swap3
15,10,9,7,3
所以这是我的算法:
public static void main(String[] args) {
int array[] = {10,3,7,15,9};
int f;
int l;
int temp;
System.out.println("Sorting array first and last elements");
for (f = 0; f < array.length; f++)
{
for (l = 4; l > f; l--)
{
if (array[f] < array[l])
{
temp = array[l];
array[l] = array[f];
array[f] = temp;
}
}
System.out.println("sorting....");
for (int c = 0; c < array.length; c++)
System.out.print(array[c] + ",");
}
System.out.println("sorted");
}
输出结果为:
对数组排序第一个和最后一个元素
...排序
15,3,7,10,9,排序....
15,10,7,9,3,排序....
15,10,9,7,3,排序....
15,10,9,7,3,排序....
15,10,9,7,3,分类
它确实排序,但它会跳转交换数字2并继续交换数字3.如何正确地执行此操作,输出显示并且不跳转交换数字2?
答案 0 :(得分:3)
外部循环从第一个元素到结束。
内循环从最后一个元素到外循环的索引。
在内循环运行后打印数组的内容。
也就是说,每次外循环迭代时都会打印一次内容。
请记住,在内循环期间,
可以发生多次掉期。
例如,for (f = 0; f < array.length; f++) {
for (l = array.length - 1; l > f; l--) {
if (array[f] < array[l]) {
temp = array[l];
array[l] = array[f];
array[f] = temp;
System.out.println(Arrays.toString(array));
}
}
}
时会发生两次交换。
如果要在每次交换后打印状态, 然后在内循环中做到这一点:
[15, 3, 7, 10, 9]
[15, 9, 7, 10, 3]
[15, 10, 7, 9, 3]
[15, 10, 9, 7, 3]
这将打印:
this.Text