添加数字时对Java数组进行排序

时间:2015-05-14 21:12:07

标签: java

我为我的英语道歉。到目前为止,我得到了这个排序数组的代码。用户输入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();
    }

}

}

3 个答案:

答案 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