我在这个程序中面临排序问题,帮助我解决这个问题



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

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

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

  1. 设置int limit = n - 1并另外减少嵌套循环中的长度:for (int j = 0; j < limit - 1; j++)- 因此,数组的最后一个元素被排除在排序之外。
    修复:将嵌套循环中的条件更改为j < limit - i,然后在第一次迭代中,最大数字"冒泡"到索引n - 1处数组的最后一个元素。
  2. 使用相同的循环参数在外循环"打印"数组的内容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();
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]);
}
}
}

最新更新