package 排序算法;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] arr = new int[] {5,3,2,4,8,1,0};
insertSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void insertSort(int[] arr) {
//遍历所有的数字
for(int i = 1;i < arr.length;i++) {
//如果当前数字比前面数字小
if(arr[i] < arr[i-1]) {
int temp = arr[i];
int j;
//遍历当前数字前面的所有数字
for(j = i-1 ; j>=0&&temp<arr[j];j--) {
arr[j+1] = arr[j];
}
arr[j+1] = temp;
}
}
}
}
插入排序实现原理:
int[] arr = new int []{3,2,4,8,5,2}
- 先从下标1 开始遍历一遍数组
- 如果当前数字arr[i]<arr[i-1]则表示当前数字需要交换位置
- 用临时数字temp储存arr[i]
- 然后遍历i前面的数字,如果当前数字temp<arr[j]并且下标j大于等于0
- 就把arr[j]向后移动一位,即arr[j+1] =arr[j]
- 当不满足情况时,把temp的值赋值给arr[j+1]
例如
int[] arr = new int []{3,2,4,8,5,2}
从下标1开始遍历,当前数字arr[1]<arr[0],temp=arr[1]
然后遍历下标1前面的所有数字,
j=i-1=0 ,temp<arr[j]&&j>=0,j-- 把 当前数字arr[j]向后一位即arr[j+1]=arr[j]
此时j = j-- = -1,无法与前面数字做比较,即把temp的值赋给arr[j+1]
数组变成{2,3,4,8,5,2}
然后下标2,arr[2]>arr[1]不做处理
下标3,arr[3]>arr[2]不做处理
扫描二维码关注公众号,回复: 11647187 查看本文章下标4,arr[4]<arr[3],把arr[3]向后移一位即arr[4]=arr[3];
数组变成{2,3,4,temp,8,2}
temp>arr[2],即不用再跟换位置arr[j+1]=temp
以此类推