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;