alex prezmon
alex prezmon

Reputation: 105

Sort Java array while adding numbers

I apologize for my english. So far I got this code that sort an array. The user input 10 numbers and after that, the program makes the sorting. But what I want is that every time the user inputs a number, the program immediately makes the sort. How can I do that? For example, if I input 5 and then 3, immediately takes the 3 to the first position. And then if I put 2, immediately take it to the first position and sort the others (2,3,5). Then if I put 1, takes it to the first position, sorting the others(1,2,3,5) and so on.

   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] + " ");
        }
    }
} 

Now I have this code and it works. It does what I wanted to do. But to me it's a little bit complicated. I'm still a beginner. I understand what it does but is there a better way to do it. An easier way? Thanks

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();
    }

}

}

Upvotes: 0

Views: 2357

Answers (3)

JimW
JimW

Reputation: 186

You make things more difficult for yourself using an array but assuming you want to start with an array of size 10 filled with 0s (so 0 is not a valid input) the basic algorithm is to go through the currently sorted array and if the current value is less than the indexed value move all the values in the sorted array to the right and insert the current value at the current index. As others have already mentioned for larger datasets this is very inefficient but for an array of size 10 it's not a big deal.

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;
    }
}

Here's what the output at each iteration would look like for the input 5, 3, 2, 1, 4, 10, 20, 15, 13, 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

Upvotes: 0

Ritesh  Karwa
Ritesh Karwa

Reputation: 2254

here you go

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] + " ");
            }
        }

        }
}

Upvotes: 1

Forseth11
Forseth11

Reputation: 1438

To do this create a sort method which you can call to sort an array then return a new sorted array. Next every time a user inputs run a for loop which will create an array with the current amount entered. While entering just use i+1. Finally, with the new array call the sort method and the sorted array will be returned and you can do as you wish with the new array.

Upvotes: 0

Related Questions