我试图实现一个简单的插入排序算法,其工作是将给定的ArrayList
按降序排序。
以下是所有代码:
import java.util.ArrayList;
import java.util.Scanner;
public class InsertionSort {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
ArrayList<Integer> list = new ArrayList<Integer>();
while (reader.hasNextInt()) {
list.add(reader.nextInt());
}
sort(list);
for (int i = 0; i < list.size(); i++) {
System.out.print(Integer.toString(list.get(i)) + " ");
}
}
private static void sort(ArrayList<Integer> list) {
for (int i = 1; i < list.size(); i++) {
int key = list.get(i);
int j = i - 1;
while (j >= 0 && list.get(j) < key) {
list.set(j + 1, list.get(j));
j--;
}
list.set(j + 1, key);
}
}
}
但是,有时System.out.print
循环中的for
方法并不总是对列表中的所有元素执行。以下是输入和输出的一些示例:
// Input:
31
41
59
26
41
58
^C
// Output:
59 58 41
// Input:
5
2
4
6
1
3
^C
// Output:
6 5
我无法理解为什么会这样。提前谢谢!
答案 0 :(得分:0)
我建议使用“try with resources”语言构造。
public static void main(String[] args) {
try (Scanner reader = new Scanner(System.in)) {
ArrayList<Integer> list = new ArrayList<Integer>();
while (reader.hasNextInt()) {
list.add(reader.nextInt());
}
sort(list);
for (int i = 0; i < list.size(); i++) {
System.out.print(Integer.toString(list.get(i)) + " ");
}
} /* catch (Exception e) {
} finally {
} */
}
另一点是:你用“STRG + c”退出程序(我在结尾看到“^ C”)。也许输入流无法正常刷新。您应该引入退出条件而不是使用OS依赖的快捷方式。