0

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

}

}

7
  • 2
    It's called InsertionSort ... Commented May 14, 2015 at 21:15
  • If you don't need duplicate values, you could simply use a sorted TreeSet. Commented May 14, 2015 at 21:16
  • if it's not a homework(though i think it is), you can use TreeSet to handle it painlessly. Commented May 14, 2015 at 21:17
  • SortedMuiltiset if duplicates must be accepted Commented May 14, 2015 at 21:18
  • 1
    You array is always sorted: so on every addition you can use Arrays.binarySearch() or you own binary search implementation to discover position on which new item should be inserted. Commented May 14, 2015 at 21:27

3 Answers 3

1

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

        }
}
Sign up to request clarification or add additional context in comments.

1 Comment

That's not really an insertion sort, it's doing a full bubble sort each time a new value is added.
0

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.

1 Comment

suboptimal, and probably not what the tutor asked
0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.