学习冒泡排序
Learning bubble sort
我的代码可以正常工作,但是当我执行代码时,数组的最后一个元素没有排序,它显示不变请帮助我。
package array;
import java.util.Scanner;
public class Array {
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
System.out.println("Enter the number of elements: ");
int numOf=in.nextInt();
int array1[]=new int[numOf];
for(int i=0;i<array1.length;i++){
System.out.println("Insert the "+(i+1)+" element of the array: ");
array1[i]=in.nextInt();
}
System.out.println("The inserted array is:");
for(int j=0;j<array1.length;j++){
System.out.print(array1[j]+" ");
}
int temp=0;
for(int k=0;k<array1.length;k++){
for(int z=1;z<(array1.length-1);z++){
if(array1[z-1]>array1[z]){
temp=array1[z-1];
array1[z-1]=array1[z];
array1[z]=temp;
}
}
}
System.out.println("Sorted array");
for(int c=0;c<array1.length;c++){
System.out.print(array1[c]+" ");
}
}
}
当您看到 "off by one error" 时,请查看您的代码,您正在循环遍历从边界开始或结束 1 或多或少 1 的条件。
在这种情况下,我会仔细查看这一行
for(int z=1;z<(array1.length-1); z++)
为什么会这样 length -1
正确的排序循环如下:
for (int k = 0; k < array1.length-1; k++) {
for (int z = 0; z < array1.length-k-1; z++) {
if (array1[z] > array1[z+1]) {
temp = array1[z];
array1[z] = array1[z+1];
array1[z+1] = temp;
}
}
}
我的代码可以正常工作,但是当我执行代码时,数组的最后一个元素没有排序,它显示不变请帮助我。
package array;
import java.util.Scanner;
public class Array {
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
System.out.println("Enter the number of elements: ");
int numOf=in.nextInt();
int array1[]=new int[numOf];
for(int i=0;i<array1.length;i++){
System.out.println("Insert the "+(i+1)+" element of the array: ");
array1[i]=in.nextInt();
}
System.out.println("The inserted array is:");
for(int j=0;j<array1.length;j++){
System.out.print(array1[j]+" ");
}
int temp=0;
for(int k=0;k<array1.length;k++){
for(int z=1;z<(array1.length-1);z++){
if(array1[z-1]>array1[z]){
temp=array1[z-1];
array1[z-1]=array1[z];
array1[z]=temp;
}
}
}
System.out.println("Sorted array");
for(int c=0;c<array1.length;c++){
System.out.print(array1[c]+" ");
}
}
}
当您看到 "off by one error" 时,请查看您的代码,您正在循环遍历从边界开始或结束 1 或多或少 1 的条件。
在这种情况下,我会仔细查看这一行
for(int z=1;z<(array1.length-1); z++)
为什么会这样 length -1
正确的排序循环如下:
for (int k = 0; k < array1.length-1; k++) {
for (int z = 0; z < array1.length-k-1; z++) {
if (array1[z] > array1[z+1]) {
temp = array1[z];
array1[z] = array1[z+1];
array1[z+1] = temp;
}
}
}