代码思路:
用一个变量保存待插入值,一个变量indexInsert更改插入位置
从数组第二个元素开始遍历数组,将遍历元素与之前元素做对比,直到找到比遍历值大的元素,或对比完该元素之前的所有元素时停止。
若对比完所有元素,则将遍历值赋值到第一个,若找到满足条件的值,此时indexInsert实际指向的是大于遍历值的元素,所以应当赋值到indexInsert+1的位置。
代码如下:
package sort;
import java.util.Arrays;
public class InsertSortAPP {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int arr[]=new int[10];
for(int i=0;i<arr.length;i++) {
arr[i]=(int)(Math.random()*100);
}
System.out.println("排序前:");
System.out.println(Arrays.toString(arr));
insertSort(arr);
System.out.println("排序后:");
System.out.println(Arrays.toString(arr));
}
public static int[] insertSort(int arr[]) {
for(int i=1;i<arr.length;i++) {
int insertIndex=i-1;//从第二个开始遍历,记录待插入位置
int indexValue=arr[i];//记录待插入值
//1.将待插入值与前值做对比,若下标小于0,则代表插入位置在第一个,
//2.若插入值大于比较值,代表还未找到位置
while(insertIndex>=0&&indexValue>arr[insertIndex]) {
arr[insertIndex+1]=arr[insertIndex];
insertIndex--;//继续前推比较
}
arr[insertIndex+1]=indexValue;//当满足时,insertIndex实际指向的是待插入值的前一位
}
return arr;
}
}