Java 冒泡排序不起作用

Java Bubble sorting not working

我只想编写一个对 3 个整数进行排序的程序。整数是从输入对话框中输入的。我的代码非常简单。我只需要获取一些数据并将它们放入名为 num 的数组中。然后我创建了一个方法来使用冒泡排序逻辑对数据进行排序。该方法称为 sort。我添加了命令以显示 System.out.println("Sorted Result : "+Arrays.toString(num)) 的排序结果,但这不起作用。 输出只是让我输入数据,然后什么也没有发生。

任何人都可以告诉我我错过了什么或我做错了什么吗? 谢谢。

package numThree;

import java.util.Scanner;
import java.util.Arrays;

public class sort {


    public static void main(String[] args) {

            Scanner sc = new Scanner(System.in);
            int[] num = new int[3];


            //INPUT DATA
            System.out.println("Enter integers : ");

            for(int i=0;i<=num.length;i++){

                num[i]=sc.nextInt();

            }

            sort(num);

    }

    //SORTING
    public static void sort (int[] num){

        for(int i=0;i<=num.length-1;i++){

            for(int j=0;j<=num.length-i;j++){

                if(num[j-1]>num[j]){
                    int temp = num[j];
                    num[j] = num[j-1];
                    num[j-1] = temp;
                }

            }


            System.out.println("Sorted Result : "+Arrays.toString(num));

        }


    }

}

我相信您需要一个布尔标志来实现冒泡排序,因为您无法提前知道循环将执行多少次连续元素的交换。

试试这个:

package numThree;

import java.util.Scanner;
import java.util.Arrays;

public class sort {


    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int[] num = new int[3];


        //INPUT DATA
        System.out.println("Enter integers : ");

        for(int i=0;i<=num.length;i++){

            num[i]=sc.nextInt();

        }

        sort(num);

    }

    //SORTING
    public static void sort (int[] num){
       boolean swapped = true;
       while(swapped){ 
           swapped = false;
           for(int i=0;i<num.length-1;i++){

                if(num[i]>num[i+1]){
                    int temp = num[i];
                    num[i] = num[i+1];
                    num[i+1] = temp;
                    swapped = true;
                }
           }
       }
       System.out.println("Sorted Result : "+Arrays.toString(num));
    }
}

请注意,它仍然可以稍微改进:每次循环时,最大的数字将尽可能接近数组的末尾:不需要检查或交换直到每次结束时间。 通过使用变量作为索引的上限 i 并在 for 循环后减小其值,可以减少迭代总数。

int end = num.length-1;
while(swapped){ 
   swapped = false;
   for(int i=0;i<end;i++){

        if(num[i]>num[i+1]){
            int temp = num[i];
            num[i] = num[i+1];
            num[i+1] = temp;
            swapped = true;
        }
    }
    end--;
 }