一、介绍
二、思想
三、代码
package cn.qqqking.sort;
import java.util.Arrays;
/**
* @author AnQi
* @date 2020/4/18 11 20:46
* @description
*/
public class InsertSort {
public static void main(String[] args) {
int []arr = {101,34,119,1,23,635,123,745635};
insertSort(arr);
}
/**
* 插入排序
*/
public static void insertSort(int [] arr){
for (int i = 1; i < arr.length; i++) {
//定义待插入的数
int insertVal = arr[i];
int insertIndex = i -1 ; //与前一个比较 插入
/**
* insertVal 找位置
* 1、insertIndex >= 0 避免越界
* 2、insertVal < arr[insertIndex]
* 待插入的数 没有找到位置
* 3、当前arr[insertIndex] 数需要移动
*/
while( insertIndex >= 0 && insertVal < arr[insertIndex]){
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
/**
* 当退出while循环时 则说明插入位置找到 insertIndex + 1
* 说明 insertVal = arr[1] 的值大于前一个则保持不动
* 因为insertIndex是 1-1
* 所以 需要放在 insertIndex+1 的位置
*/
arr[insertIndex + 1] = insertVal;
System.out.println("第"+(i)+"数据!!");
System.out.println(Arrays.toString(arr));
}
}
}
/**
* 逐步推导方式
* 第一轮 {101,34,119,1} => {34,101,119,1}
*/
/*
//定义待插入的数
int insertVal = arr[1];
int insertIndex = 1 -1 ; //与前一个比较 插入
*/
/**
* insertVal 找位置
* 1、insertIndex >= 0 避免越界
* 2、insertVal < arr[insertIndex]
* 待插入的数 没有找到位置
* 3、当前arr[insertIndex] 数需要移动
*//*
while( insertIndex >= 0 && insertVal < arr[insertIndex]){
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
*/
/**
* 当退出while循环时 则说明插入位置找到 insertIndex + 1
* 说明 insertVal = arr[1] 的值大于前一个则保持不动
* 因为insertIndex是 1-1
* 所以 需要放在 insertIndex+1 的位置
*//*
arr[insertIndex + 1] = insertVal;
System.out.println("第一轮数据!!");
System.out.println(Arrays.toString(arr));
}*/