【问题标题】:i am facing a sorting problem in this program help me with this我在这个程序中遇到了一个排序问题,帮我解决这个问题
【发布时间】:2021-11-02 09:51:12
【问题描述】:

//我面临的问题是它没有正确排序数组 //它所做的是它错过了第一个数字并从第二次排序开始

package exception;
import java.io.*;

public class Program6 {
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println("enter numbers: ");
        int n = Integer.parseInt(br.readLine());
        int arr []= new int[n];
        
        for(int i=0; i<n; i++) {
            System.out.print("enter int:");
            arr[i] = Integer.parseInt(br.readLine());
            
        }
        int limit = n-1;
        boolean flag = false;
        int temp;
        for (int i=0; i<limit; i++) {
            for(int j =0; j<limit-1; j++) {
                if(arr[j]>arr[j+1]) {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    flag = true;
                }
            }
            if(flag==false) break;
            else flag=false;
            
            System.out.println("sorted array: ");
            for(i=0; i<n; i++)
                System.out.println(arr[i]);
        }
    }
}

【问题讨论】:

    标签: java sorting bubble-sort


    【解决方案1】:

    呈现的代码中有两个主要问题:

    1. 设置int limit = n - 1 并额外减少嵌套循环中的长度:for (int j = 0; j &lt; limit - 1; j++) - 因此,数组的最后一个元素被排除在排序之外。
      修复:将嵌套循环中的条件更改为 j &lt; limit - i,然后对于第一次迭代,最大数量“冒泡”到索引 n - 1 处的数组的最后一个元素。
    2. “打印”数组的内容inside使用相同的循环参数i,这样在打印后i变成n,并且外循环在1之后完成迭代。
      修复:实际完成排序时,将已排序数组的打印移动到外部外循环。

    固定代码为:

    int limit = n - 1;
    for (int i = 0; i < limit; i++) {
        boolean flag = false;
    
        for (int j = 0; j < limit - i; j++) { // <<-- Replace limit-1 with limit-i
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                flag = true;
            }
        }
        if(!flag) break;
    }
    
    System.out.println("sorted array: ");
    for(int i = 0; i < n; i++)
        System.out.print(arr[i] + " ");
    System.out.println();
    

    【讨论】:

      【解决方案2】:
      package exception;
      import java.io.*;
      
      public class Program6 {
          public static void main(String args[]) throws IOException{
              BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
              
              System.out.println("enter numbers: ");
              int n = Integer.parseInt(br.readLine());
              int arr []= new int[n];
              
              for(int i=0; i<n; i++) {
                  System.out.print("enter int:");
                  arr[i] = Integer.parseInt(br.readLine());
                  
              }
              int limit = n-1;
              int temp;
              for (int i=0; i<limit; i++) {
                     boolean flag=false;
                  for(int j =0; j<limit-i; j++) {         //Replace limit-1 with limit-i
                      if(arr[j]>arr[j+1]) {
                          temp = arr[j];
                          arr[j] = arr[j+1];
                          arr[j+1] = temp;
                          flag = true;
                      }
                  }
                  if(flag==false) break;
                 
                  
                  System.out.println("sorted array: ");
                  for(i=0; i<n; i++)
                      System.out.println(arr[i]);
              }
          }
      }
      

      【讨论】:

      • 我写了 4 3 2 1 来排序它给了我 3214
      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多