1.代码:
package com.example.lib5.sort;
import java.text.SimpleDateFormat;
import java.util.Date;
public class InsertSort {
public static void main(String[] args) {
// int[] arr = {101, 34, 119, 1};
int[] arr=new int[80000];
for (int i = 0; i < arr.length; i++) {
arr[i]= (int) (Math.random()*80000);
}
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time1 = simpleDateFormat.format(date);
System.out.println("排序前时间:"+time1);
insertSort(arr);
Date date2 = new Date();
String time2 = simpleDateFormat.format(date2);
System.out.println("排序后时间:"+time2);
}
private static void insertSort(int[] arr) {
/**
* 第一轮排序
* 101,34,119,1 ---->34,101,119,1
*/
//获取第一个要插入的值
for (int i = 1; i < arr.length; i++) {
int insertVal = arr[i];
//获取第一个插入的值得前一个索引
int insertIndex = i - 1;
//while循环,前一个>=0且将第一个插入的值与前面的数据进行比较,小于就交换位置
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
arr[insertIndex+1] = arr[insertIndex];
insertIndex--;
}
arr[insertIndex + 1] = insertVal;
}
}
}
2.解释:(下面都是同一个数组)
第一轮变成第二轮的具体变法(下面是同一个数组):
变化过程: