package com.guigu.sort;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
/**
* @author: guorui fu
* @versiion: 1.0
* 插入排序 相当于从前向后扩大范围进行排序
* 有序表不断扩大,无序表不断缩小
* 1.前两个进行排序 -> 前三个进行排序 -> 前四个进行排序
* 都是从范围内最后一个数开始向前一步步比较
* 由于范围扩大,之前范围的值都是已经排列好的,所以进入while会是持续进入,比较大小不会遗漏
* 这种排序下标之前的数是已经排序完成,所以while循环中插入到i之前x位置时,x之后的数会从后往前依次向后进行值覆盖
* x位置插入arr[i]
*/
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");
System.out.println("起始时间=" + simpleDateFormat.format(date));
insertSort(arr);
Date date1 = new Date();
System.out.println("起始时间=" + simpleDateFormat.format(date1));
}
//插入排序
public static void insertSort(int[] arr){
int insertVal = 0;
int insertIndex = 0;
//使用逐步推导的方式
for (int i = 0; i < arr.length; i++) {
insertVal = arr[i];
insertIndex = i - 1;
while (insertIndex >= 0 && insertVal < arr[insertIndex]){
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
//由于进入while循环后indexIndex-- 所以insertIndex + 1的位置是插入位置
//如果没有进入到while循环就进行自我替换
if (insertIndex != i - 1){
arr[insertIndex + 1] = insertVal;
}
}
System.out.println(Arrays.toString(arr));
}
}
[算法] 插入排序
该文章展示了如何用Java实现插入排序算法,通过生成一个80000个随机整数的数组来测试排序效率。在排序过程中,算法从前向后逐步扩大已排序范围,将新元素插入到正确位置。文章还记录了排序前后的时间,以评估排序的执行速度。
摘要由CSDN通过智能技术生成