两个数组的插入排序
Insertion Sort with two arrays
我需要实现插入排序,但我必须使用另一个名为 temp 的数组。在这个数组中必须复制起始数组中正确位置的值
我尝试通过一些我认为可以完成任务的修改来实现插入排序算法
public static void insertionSort(int[] a) {
int[] temp = new int[a.length];
for(int indice = 0; indice < a.length; indice++) {
int key = a[indice];
int j = indice - 1;
while(j>=0 && a[j] > key) {
a[j+1] = a[j];
j = j-1;
}
a[j+1] = temp[j+1];
}
}
我尝试将它与具有以下数字的数组一起使用:5、1、4、14、21、144、3
但是打印出来是0 0 0 0 0 0 0
问题是您正在创建临时数组,但没有为任何位置分配任何值。因此,当您执行 "a[j+1] = temp[j+1];" 时,该数组中没有任何内容,因此它将 0 分配给 a[j+1].
如果我没记错的话,temp 必须是 a 的副本,所以你可以这样做:
int[] temp = new int[a.length];
for (int i = 0; i < temp.length; i++)
{
temp[i] = a[i];
}
您没有使用临时数组。没有对 temp 进行分配。它有空数组。
尝试下面的操作,应该根据需要对数组进行排序
public static void main(String[] args) {
int[] a = { 5, 1, 4, 14, 21, 144, 3 };
int[] arr2 = insertionSort(a);
for(int i:arr2){
System.out.print(i);
System.out.print(", ");
}
}
public static int[] insertionSort(int[] input){
int temp;
for (int i = 1; i < input.length; i++) {
for(int j = i ; j > 0 ; j--){
if(input[j] < input[j-1]){
temp = input[j];
input[j] = input[j-1];
input[j-1] = temp;
}
}
}
return input;
}
我需要实现插入排序,但我必须使用另一个名为 temp 的数组。在这个数组中必须复制起始数组中正确位置的值
我尝试通过一些我认为可以完成任务的修改来实现插入排序算法
public static void insertionSort(int[] a) {
int[] temp = new int[a.length];
for(int indice = 0; indice < a.length; indice++) {
int key = a[indice];
int j = indice - 1;
while(j>=0 && a[j] > key) {
a[j+1] = a[j];
j = j-1;
}
a[j+1] = temp[j+1];
}
}
我尝试将它与具有以下数字的数组一起使用:5、1、4、14、21、144、3 但是打印出来是0 0 0 0 0 0 0
问题是您正在创建临时数组,但没有为任何位置分配任何值。因此,当您执行 "a[j+1] = temp[j+1];" 时,该数组中没有任何内容,因此它将 0 分配给 a[j+1].
如果我没记错的话,temp 必须是 a 的副本,所以你可以这样做:
int[] temp = new int[a.length];
for (int i = 0; i < temp.length; i++)
{
temp[i] = a[i];
}
您没有使用临时数组。没有对 temp 进行分配。它有空数组。
尝试下面的操作,应该根据需要对数组进行排序
public static void main(String[] args) {
int[] a = { 5, 1, 4, 14, 21, 144, 3 };
int[] arr2 = insertionSort(a);
for(int i:arr2){
System.out.print(i);
System.out.print(", ");
}
}
public static int[] insertionSort(int[] input){
int temp;
for (int i = 1; i < input.length; i++) {
for(int j = i ; j > 0 ; j--){
if(input[j] < input[j-1]){
temp = input[j];
input[j] = input[j-1];
input[j-1] = temp;
}
}
}
return input;
}