Java 如何纠正我的选择和插入排序算法

Java 如何纠正我的选择和插入排序算法,java,sorting,insertion-sort,selection-sort,Java,Sorting,Insertion Sort,Selection Sort,我编写了选择和插入排序算法,这些算法给了我错误的未排序输出。以下是我的选择排序代码: public class SelectionSort { public static void main(String[] args) { int[] arr = {23,43,45,3,54,55,23,12,22}; int min; int temp = 0; for(int i = 0; i < arr.length-

我编写了选择和插入排序算法,这些算法给了我错误的未排序输出。以下是我的选择排序代码:

public class SelectionSort {

    public static void main(String[] args) {

        int[] arr = {23,43,45,3,54,55,23,12,22};

        int min;
        int temp = 0;

        for(int i = 0; i < arr.length-1; i++)
        {
            min = i;
            for(int j = i+1; j<arr.length; j++)
            {
                if(arr[j] < arr[min])
                {
                    min = j;

                }
                temp = arr[j];
                arr[j] = arr[min];
                arr[min] = temp;
            }

        }

        for(int i = 0; i < arr.length; i++)
        {
            System.out.print(arr[i]+" ");
        }


    }

}
public class Insertion {

    public static void main(String[] args) {

        int[] arr = {2,4,6,5,4,3,5,3};

        for(int i = 1; i < arr.length; i++)
        {
            int temp = arr[i];

            int j = i;

            while( j > 0 && arr[j-1] > arr[j])
            {
                arr[j] = arr[j-1];
                j = j-1;
            }
            arr[j] = temp;
        }

        for(int i = 0; i < arr.length; i++)
        {
            System.out.print(arr[i] + " ");
        }

    }
}
公共类选择排序{
公共静态void main(字符串[]args){
int[]arr={23,43,45,3,54,55,23,12,22};
int-min;
内部温度=0;
对于(int i=0;iarr[j])
{
arr[j]=arr[j-1];
j=j-1;
}
arr[j]=温度;
}
对于(int i=0;i
输出:245436


在选择排序中,让我们关注代码的这一部分:

    for(int i = 0; i < arr.length-1; i++)
    {
        min = i;
        for(int j = i+1; j<arr.length; j++)
        {
            if(arr[j] < arr[min])
            {
                min = j;

            }
            temp = arr[j];   // <---
            arr[j] = arr[min];
            arr[min] = temp;
        }
    }
请注意,每当当前元素的比较小于其前面的元素时,都会使用其前面的元素覆盖当前元素,然后递减j。但是,您不使用当前元素更新
arr[j-1]
,因此在下一次比较中,您将使用
j-1
位置的元素与
j-2
位置的元素进行比较,而不是将当前元素与
j-2
位置的元素进行比较。要解决此问题,请将比较更新为始终与
temp
进行比较,而不是
arr[j]

while( j > 0 && arr[j-1] > temp)
{
    arr[j] = arr[j-1];
    j = j-1;
}
arr[j] = temp;
while( j > 0 && arr[j-1] > temp)
{
    arr[j] = arr[j-1];
    j = j-1;
}
arr[j] = temp;