插入排序介绍
插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。
思想
插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
代码实现
package com.liang.sort;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] arr= {101, 34, 119, 1,-1,99,88,90};
insertSort02(arr);
System.out.println(Arrays.toString(arr));
}
public static void insertSort01(int[] arr) {
//第一轮插入,默认arr[0]之前的数是有序序列
int insVal=arr[1];//代插入的数
int insIndex=1-1;//将要插入的位置
while(insIndex>=0 && insVal<arr[insIndex]) {
arr[insIndex+1]=arr[insIndex];
insIndex--;
}
arr[insIndex+1]=insVal;
System.out.println("第 1 轮插入");
System.out.println(Arrays.toString(arr));
//第2轮插入,默认arr[1]之前的数是有序序列
insVal=arr[2];//代插入的数
insIndex=2-1;//将要插入的位置
while(insIndex>=0 && insVal<arr[insIndex]) {
arr[insIndex+1]=arr[insIndex];
insIndex--;
}
arr[insIndex+1]=insVal;
System.out.println("第 2 轮插入");
System.out.println(Arrays.toString(arr));
//第2轮插入,默认arr[2]之前的数是有序序列
insVal=arr[3];//代插入的数
insIndex=3-1;//将要插入的位置
while(insIndex>=0 && insVal<arr[insIndex]) {
arr[insIndex+1]=arr[insIndex];
insIndex--;
}
arr[insIndex+1]=insVal;
System.out.println("第 3 轮插入");
System.out.println(Arrays.toString(arr));
}
/*
* 推导
*/
public static void insertSort02(int[] arr) {
for(int i=1;i<arr.length;i++) {
int insVal=arr[i];//代插入的数
int insIndex=i-1;//将要插入的位置
while(insIndex>=0 && insVal<arr[insIndex]) {
arr[insIndex+1]=arr[insIndex];//被比较的数后移
insIndex--;
}
arr[insIndex+1]=insVal;//找到合适的位置插入
}
}
}