我为我的英语道歉。到目前为止,我得到了这个排序数组的代码。用户输入10个数字,然后程序进行排序。但我想要的是每次用户输入一个数字时,程序立即进行排序。我怎样才能做到这一点? 例如,如果我输入5然后输入3,则立即将3输入第一个位置。然后,如果我放2,立即将它带到第一个位置并对其他位置进行排序(2,3,5)。然后,如果我放1,将它带到第一个位置,对其他位置进行排序(1,2,3,5),依此类推。
import java.util.Scanner;
public class Nine{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int temp = 0;
int[] num = new int[10];
for(int i = 0; i < 10; i++){
System.out.print("Número: ");
num[i] = input.nextInt();
}
System.out.println();
for(int i = 0; i < 10; i++){
System.out.print(num[i] + " ");
}
System.out.println();
for(int i = 0; i < 10; i++){
for(int j = 0; j < 10 - i - 1; j++){
if(num[j+1] < num[j]){
temp = num[j+1];
num[j+1] = num[j];
num[j] = temp;
}
}
}
System.out.println();
for(int i = 0; i < 10; i++){
System.out.print(num[i] + " ");
}
}
}
现在我有了这个代码并且它有效。它做我想做的事。但对我来说,这有点复杂。我还是个初学者。我理解它的作用,但有更好的方法。更简单的方法?感谢
import java.util.Scanner;
public class practice {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int[] num = new int[10];
int n = 0, l = 0, t = 0;
for(int i = 0; i < num.length; i++){
System.out.print("Número: ");
n = input.nextInt();
l = 0;
while(num[l] < n && l < i){
l = l + 1;
}
t = i;
while(t > l){
num[t] = num[t - 1];
t = t - 1;
}
num[l] = n;
for(int temp : num){
System.out.print(temp + " ");
}
System.out.println();
}
}
}
答案 0 :(得分:1)
在这里
public class TestProgram {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
int temp = 0;
int[] num = new int[10];
for (int b = 0; b < 10; b++) {
System.out.println("Número: ");
num[b] = input.nextInt();
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10 - i - 1; j++) {
if (num[j + 1] < num[j]) {
temp = num[j + 1];
num[j + 1] = num[j];
num[j] = temp;
}
}
}
System.out.println();
for (int k = 0; k < 10; k++) {
System.out.println(num[k] + " ");
}
}
}
}
答案 1 :(得分:0)
为此,请创建一个sort方法,您可以调用该方法对数组进行排序,然后返回一个新的排序数组。每次用户输入时都会运行一个for循环,这将创建一个输入当前数量的数组。进入时只需使用i + 1。最后,使用新的数组调用sort方法,将返回已排序的数组,您可以按照自己的意愿使用新数组。
答案 2 :(得分:0)
你自己使用一个数组会让事情变得更加困难,但是假设你想从一个大小为10的数组开始填充0(所以0不是一个有效的输入),基本算法是通过当前排序的数组,如果当前值小于索引值将有序数组中的所有值向右移动,并将当前值插入当前索引。正如其他人已经提到的更大的数据集,这是非常低效的,但对于大小为10的数组,这不是什么大问题。
int current = input.nextInt();
for (int j = 0; j < sorted.length; j++) {
if (sorted[j] == 0) {
sorted[j] = current;
break;
}
if (current < sorted[j]) {
for (int k = sorted.length - 1; k > j; k--) {
sorted[k] = sorted[k - 1];
}
sorted[j] = current;
break;
}
}
这里是输入5,3,2,1,4,10,20,15,15,5的每次迭代输出的结果:
5 0 0 0 0 0 0 0 0 0
3 5 0 0 0 0 0 0 0 0
2 3 5 0 0 0 0 0 0 0
1 2 3 5 0 0 0 0 0 0
1 2 3 4 5 0 0 0 0 0
1 2 3 4 5 10 0 0 0 0
1 2 3 4 5 10 20 0 0 0
1 2 3 4 5 10 15 20 0 0
1 2 3 4 5 10 13 15 20 0
1 2 3 4 5 5 10 13 15 20