代码之家  ›  专栏  ›  技术社区  ›  bnrfly

Java气泡排序无法工作

  •  0
  • bnrfly  · 技术社区  · 9 年前

    我只想编写一个程序,对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));
    
            }
    
    
        }
    
    }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   Angelo Oparah    9 年前

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

    试试这个:

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