学习冒泡排序

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