1.1排序思路
1.2具体实现
1.第一轮排序
public class InsertSort {
public static void main(String[] args) {
int arr[] = {4, 3, 5, 1};
insertSort(arr);
}
public static void insertSort(int[] arr) {
int insertVal=arr[1];
int insertIndex=1-1;
while (insertIndex>=0 && insertVal<arr[insertIndex]){
arr[insertIndex+1]=arr[insertIndex];
insertIndex--;
}
arr[insertIndex+1]=insertVal;
System.out.println("第一轮排序:" + Arrays.toString(arr));
}
}
第一轮排序:[3, 4, 5, 1]
2.第二、三轮排序
public class InsertSort {
public static void main(String[] args) {
int arr[] = {4, 3, 5, 1};
insertSort(arr);
}
public static void insertSort(int[] arr) {
int insertVal = arr[1];
int insertIndex = 1 - 1;
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
arr[insertIndex + 1] = insertVal;
System.out.println("第一轮排序:" + Arrays.toString(arr));
insertVal=arr[2];
insertIndex=2-1;
while (insertIndex>=0 && insertVal<arr[insertIndex]){
arr[insertIndex+1]=arr[insertIndex];
insertIndex--;
}
arr[insertIndex+1]=insertVal;
System.out.println("第二轮排序:" + Arrays.toString(arr));
insertVal=arr[3];
insertIndex=3-1;
while (insertIndex>=0 && insertVal<arr[insertIndex]){
arr[insertIndex+1]=arr[insertIndex];
insertIndex--;
}
arr[insertIndex+1]=insertVal;
System.out.println("第三轮排序:" + Arrays.toString(arr));
}
}
第一轮排序:[3, 4, 5, 1]
第二轮排序:[3, 4, 5, 1]
第三轮排序:[1, 3, 4, 5]
3.代码优化
public class InsertSort1 {
public static void main(String[] args) {
int arr[] = {4, 3, 5, 1};
System.out.println("排序前:" + Arrays.toString(arr));
insertSort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
}
public static void insertSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int insertVal = arr[i + 1];
int insertIndex = i;
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
arr[insertIndex + 1] = insertVal;
}
}
}
排序前:[4, 3, 5, 1]
排序后:[1, 3, 4, 5]
4.测试插入排序算法速度
public class InsertSort1 {
public static void main(String[] args) {
int[] arr=new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i]=(int)(Math.random()*800000);
}
Date date1 = new Date();
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = simpleDateFormat1.format(date1);
System.out.println("排序前的时间是:"+format1);
insertSort(arr);
Date date2 = new Date();
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format2 = simpleDateFormat2.format(date2);
System.out.println("排序后的时间是:"+format2);
}
public static void insertSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int insertVal = arr[i + 1];
int insertIndex = i;
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
arr[insertIndex + 1] = insertVal;
}
}
}
排序前的时间是:2021-01-08 22:42:10
排序后的时间是:2021-01-08 22:42:11