要点:从未排序数据拿到待排序的数字,和已排序的数据进行比较,找到合适的位置插入。
import java.util.Arrays; public class InsertSort { public static void main(String[] args) { int[] arr = {101, 34, 119, 1, -1, 89}; insetSort(arr); //System.out.println(Arrays.toString(arr)); //测试8w数据时间 //int maxLength=80000; //int[] arr=new int[maxLength]; // //for (int i = 0; i < maxLength; i++) { // arr[i]= (int) (Math.random()*maxLength); //} System.out.println(Arrays.toString(arr)); //long start = System.currentTimeMillis(); //insetSort(arr); //long end = System.currentTimeMillis(); //System.out.println(end-start); } // 插入排序 public static void insetSort(int[] arr) { //待插入的数据 int insertVal = 0; //第一个比较数字的下标 int insertIndex = 0; for (int i = 1; i < arr.length; i++) { insertVal = arr[i]; insertIndex = i - 1; // 若果比较的数字小于待插入数据,比较数字往后移动一位 while (insertIndex >= 0 && insertVal < arr[insertIndex]) { arr[insertIndex + 1] = arr[insertIndex]; //修改比较数据 insertIndex--; } //待插入的数据大于比较的数据或者待插入的下标到达数组前端 if (insertIndex + 1 != i) { arr[insertIndex + 1] = insertVal; } System.out.println(Arrays.toString(arr)); } } }