我是否在 java 中正确实施了插入排序?
am I implemented correctly Insertion sort in java?
我了解了插入排序,我们可以通过多种方式实现这种排序,我对此 post 的唯一期望是我的实现是否可以被视为插入排序的实现之一?
package com.tech.kj.dp;
class InsertionSort1 {
public static void main(String[] args) {
int[] array= {20,54,-15,-9,0,45,2,11};
for(int index = 1; index < array.length; index++){
int nextElement = array[index];
for(int i=0;i<index;i++){
int sorted=array[i];
if(nextElement<sorted){
swap(array,index,i);
}
}
}
show(array);
}
public static void swap(int[] array,int i,int j){
if(i==j){
return;
}
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void show(int[] array){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+"\t");
}
System.out.println();
}
}
我相信您的代码给出了正确的结果,正确排序。它并不完全按照我理解的方式进行插入排序。而且我相信它正在做比必要更多的交换。
示例未排序数组:[5, 7, 2].
您的代码第一次通过外循环检查 7 是否不小于 5,因此不应交换这些数字。
下次你第一次检查 2 是否小于 5 时,交换它们,得到 [2, 7, 5]。 nextElement
仍然是 2,所以接下来因为 2 也小于 7,所以你交换 7 和 5。虽然它确实给出了正确的结果,但正如我所说,它似乎不太合逻辑,并且作为 reader 我很难说服自己这是正确的。
取而代之的是我记得理解插入排序的方式:当你找到2的正确位置时(通过确定它小于5),你应该将它复制出数组,将7和5推一个放在右边,然后在 5 之前的位置(索引 0)插入 2(因此称为插入排序)。
我了解了插入排序,我们可以通过多种方式实现这种排序,我对此 post 的唯一期望是我的实现是否可以被视为插入排序的实现之一?
package com.tech.kj.dp;
class InsertionSort1 {
public static void main(String[] args) {
int[] array= {20,54,-15,-9,0,45,2,11};
for(int index = 1; index < array.length; index++){
int nextElement = array[index];
for(int i=0;i<index;i++){
int sorted=array[i];
if(nextElement<sorted){
swap(array,index,i);
}
}
}
show(array);
}
public static void swap(int[] array,int i,int j){
if(i==j){
return;
}
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void show(int[] array){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+"\t");
}
System.out.println();
}
}
我相信您的代码给出了正确的结果,正确排序。它并不完全按照我理解的方式进行插入排序。而且我相信它正在做比必要更多的交换。
示例未排序数组:[5, 7, 2].
您的代码第一次通过外循环检查 7 是否不小于 5,因此不应交换这些数字。
下次你第一次检查 2 是否小于 5 时,交换它们,得到 [2, 7, 5]。 nextElement
仍然是 2,所以接下来因为 2 也小于 7,所以你交换 7 和 5。虽然它确实给出了正确的结果,但正如我所说,它似乎不太合逻辑,并且作为 reader 我很难说服自己这是正确的。
取而代之的是我记得理解插入排序的方式:当你找到2的正确位置时(通过确定它小于5),你应该将它复制出数组,将7和5推一个放在右边,然后在 5 之前的位置(索引 0)插入 2(因此称为插入排序)。