思路
将一个记录插入到已经排序好的有序序列中。
动图演示
图片来源:
https://www.toutiao.com/a6593273307280179715/?iid=6593273307280179715
java代码
附带详细说明
/**
* 直接插入排序
*/
public class SimpleInsert {
public static void main(String[] args) {
int[] arr = {1,5,9,6,4,2,5,2,6};
System.out.println("排序前===》");
ergodic(arr);
sort(arr);
System.out.println();
System.out.println("排序后===》");
ergodic(arr);
}
public static void sort(int[] arr){
int len = arr.length;
// arr[0]一定是有序的,因为就一个
for (int i = 1; i < len; i++) {
//设置临时值temp保存当前下标i的值
int temp = arr[i];
//插入操作,向当前i下标前的有序序列插入
for (int j = i-1;j>=0;j--){
//我插入的话,肯定有元素需要向后移动的。
//我们从后往前比较,遇见大的元素就将它往后移动一位
if(temp < arr[j]){
//遇见大元素就移动
arr[j+1] = arr[j];
}else {
//如果未遇到,说明此位置就是i下标的归宿
//是temp与j比较的,temp不小于j的话,那你i就只能处在j+1的位置了
arr[j+1] = temp;
//下面的元素不需要再比较了。可以直接跳过当前循环
break;
}
}
}
}
public static void ergodic(int[] arr){
for (int i = 0; i < arr.length ; i++) {
System.out.print(arr[i]+",");
}
}
}