//我面临的问题是它没有正确排序数组 它所做的是它错过了第一个数字,并从第二个排序开始
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]);
}
}
}
呈现的代码中有两个主要问题:
- 设置
int limit = n - 1
并另外减少嵌套循环中的长度:for (int j = 0; j < limit - 1; j++)
- 因此,数组的最后一个元素被排除在排序之外。
修复:将嵌套循环中的条件更改为j < limit - i
,然后在第一次迭代中,最大数字"冒泡"到索引n - 1
处数组的最后一个元素。 - 使用相同的循环参数在外循环中"打印"数组的内容
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]);
}
}
}