public static void insertionSort(int[] arr) {
// each outer loop iteration inserts arr[i] into the correct location of
// the already-sorted sub-list: arr[0] through arr[i-1]
for (int i = 1; i < arr.length; i++) {
int valueToInsert = arr[i];
int loc = 0;
while (loc < i && arr[loc] < valueToInsert) {
loc++;
}
for (int j = loc; j < i; j++) {
arr[j+1] = arr[j]; // some issue with this
// loop as I'm overriding the next element
}
arr[loc] = valueToInsert; //// put the value
//in correct location in sub-list
}
}
Above is my insertion sort code, it is not working properly, the sample input is given below
input [3, 9, 2]
expected output is [2, 3, 9]
But I'm getting [2, 3, 3]
Please let me more about this problem regarding insertion sort and your quick response is solicited
The problem is
for (int j = loc; j < i; j++) {
arr[j+1] = arr[j];
}
The previous value in the array will cover the next one. It should be
for (int j = i-1; j >= loc; j--) {
arr[j+1] = arr[j];
}
public class InsertionSort {
public static void main(String...strings){
int[] array= {3, 9, 2};
intsertionSort(array);
}
public static void intsertionSort(int[] arr){
for (int i=1; i<arr.length;i++){
int valueToInsert =arr[i];
int j;
//below this is error point in your code
for(j=i-1;j>=0 && valueToInsert <arr[j];j--)
arr[j+1]=arr[j];
arr[j+1]=valueToInsert;
}
//used for testing the function
for(int a:arr){
System.out.println(a);
}
}
}
input [3, 9, 2]
output is [2, 3, 9]
Here is the IdeOne Link
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.