3.4排序算法之直接插入排序(属于插入排序)
思路:
- 从第二个数字开始,后面所有的数字,按个遍历一遍,我们认为遍历的时候,前面的数字都是有序的
- 再遍历的过程中,如果下一个数字比当前数字小,就一直往前移动,移动到比前面的数字大为止。
- 接着检查后面的数字
画图:
第二个数字小于第一个数字
- 将第二个数字复制出来,存到别的地方
- 用前面的数字替换掉它
- 再把存在外面的数字存到前面一位
接着将下标向后移
后面一样了,【注】有值小于前面多个值的时候
代码:
package main.java.com.LiKou.arithmetic;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] arr = {3, 4, 2, 1, 8, 7, 5};
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 && arr[j] > temp; j--){
//把前一个数字赋给后一个数字
arr[j + 1] = arr[j];
}
//把临时变量(外侧for循环的当前元素)赋给不满足条件的后一个元素
arr[j + 1] = temp;
}
}
}
}