How to make Bubble Sort in Java to output the sort

2019-03-06 15:55发布

问题:

This is my code for the Bubble Sort. I cannot get the actual sorted values to output. The program reads the inputted numbers, but does not print it sorted. I'm not sure what I have to do to make them sort. Any advice or suggestions would be helpful.

package sortingalgorithm2;
import java.util.Scanner;

public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args)
{
    Scanner read = new Scanner (System.in);
    int[] num = new int[15];
    int size = 15;

    System.out.println("Enter 15 numbers: ");
    for (int i=0; i <= size-1; i++)
    {
        num[i] = read.nextInt();

    }

    for (int i=0; i <= size-1; i++)
    {
        if (num[i] >=1 && num[i] <= 1000)
       {
        System.out.println("The numbers you entered are: ");
        System.out.println(+num[0]);
        System.out.println(+num[1]);
        System.out.println(+num[2]);
        System.out.println(+num[3]);
        System.out.println(+num[4]);
        System.out.println(+num[5]);
        System.out.println(+num[6]);
        System.out.println(+num[7]);
        System.out.println(+num[8]);
        System.out.println(+num[9]);
        System.out.println(+num[10]);
        System.out.println(+num[11]);
        System.out.println(+num[12]);
        System.out.println(+num[13]);
        System.out.println(+num[14]);
     }
    else
    {
        System.out.println("Data input is invalid. Enter a number between "
                +
                "1 and 1000.");
        break;
    }
    }

    BubbleSort (num);
    for (int i=0; i < num.length; i++)
    {
        System.out.println("The sorted numbers are: ");
        System.out.print(num[i]+ " ");
    }

}

private static void BubbleSort(int[] num)
{
    for (int i=0; i <= num.length; i++)
        for (int x=1; x <= num.length; x++)
            if (num[x] > num[x+1])
            {
                int temp = num[x];
                num[x] = num[x+1];
                num[x+1] = temp;
            }

}

}

回答1:

Try this Bubble sort :

private static void BubbleSort(int[] num) {
 for (int i = 0; i < num.length; i++) {
    for (int x = 1; x < num.length - i; x++) {
        if (num[x - 1] > num[x]) {
            int temp = num[x - 1];
            num[x - 1] = num[x];
            num[x] = temp;

        }
    }
  }
}


回答2:

You are printing the actual numbers in the order the user entered. Try this instead:

int[] sortedNumbers = new int[15];

sortedNumbers = BubbleSort (num);

    for (int i=0; i < sortedNumbers.length; i++)
    {
        System.out.println("The sorted numbers are: ");
        System.out.print(sortedNumbers[i]+ " ");
    }



 public static int[] BubbleSort(int [] num)
{
    int temp;   
    for (int i=1; i<num.length; i++)
    {
        for(int j=0; j<num.length-i; j++)
        {
            if (num[j] > num [j+1])
            {
                temp = num [j];
                num [j] = num [j+1];
                num [j+1] = temp;
            }
        }
    }

    return num;
}


回答3:

Try this :

    for (int i = 0; i < num.length; i++) {
        for (int j = i + 1; j < num.length; j++) {
            if (num[i] > num[j]) {
                num[i] = num[i] + num[j] - (num[j] = num[i]);
            }
        }
    }


回答4:

you are passing the array variable num (which is not static) to BubbleSort()(which does not returns a value and shadows the global num variable with its own) and trying to use the same num variable to access your sorted array from your main method which is not right. The genuine fix to this is to declare your variable num as static just before the main method( in the class declaration). So I have made the changes in the program and here is the solution.

import java.util.Scanner;

public class sol {

static int num [] =new int [15]; //declaring num as static in the class definition.
public static void main(String[] args)
{
    Scanner read = new Scanner (System.in);
    int size = 15;

    System.out.println("Enter 15 numbers: ");
    for (int i=0; i <= size-1; i++)
    {
        num[i] = read.nextInt();

    }
    read.close();
    /*for (int i=0; i <= size-1; i++)
{


    if (num[i] >=1 && num[i] <= 1000)
   {
    System.out.println("The numbers you entered are: ");
    System.out.println(+num[0]);
    System.out.println(+num[1]);
    System.out.println(+num[2]);
    System.out.println(+num[3]);
    System.out.println(+num[4]);
    System.out.println(+num[5]);
    System.out.println(+num[6]);
    System.out.println(+num[7]);
    System.out.println(+num[8]);
    System.out.println(+num[9]);
    System.out.println(+num[10]);
    System.out.println(+num[11]);
    System.out.println(+num[12]);
    System.out.println(+num[13]);
    System.out.println(+num[14]);
 }
else
{
    System.out.println("Data input is invalid. Enter a number between "
            +
            "1 and 1000.");
    break;
}
}*/ //I have disabled this just to check with the sort method.

    BubbleSort ();//no need to pass the array as it is static and declared as a      //class variable hence can be used to by all the methods of that class
    System.out.println("The sorted numbers are: ");
    for (int i=0; i < num.length; i++)
    {

        System.out.print(num[i]+ " ");
    }

}

private static void BubbleSort()
{
    for (int i=0; i < num.length; i++)// required changes in the looping
        for (int x=0; x < num.length-i-1; x++)
            if (num[x] > num[x+1])
            {
                int temp = num[x];
                num[x] = num[x+1];
                num[x+1] = temp;
            }

}

}