插入排序实现原理:
完整代码(JDK17):
package SortAlgorithm.InsertSort;
import SortAlgorithm.SelectSort.SelectSort;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] arr = {50,60,10,80,30};
System.out.println("原数组: "+ Arrays.toString(arr));
insertSort(arr);
System.out.println("排序后: "+ Arrays.toString(arr));
}
/**
* 插入排序
* @param arr
*/
public static void insertSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
// i记录无序表第一个元素的索引,向后遍历
// insertVal记录无序表第一个元素的值
int insertVal = arr[i];
// j记录有序表最后一个元素的索引,向前遍历
int j;
for (j = i - 1; j >= 0; j--) {
if (arr[j] > insertVal){
//有序表最后一个元素大于无序表第一个元素,把有序表最后一个元素后移
arr[j + 1] = arr[j];
}else{
//无序表元素小于等于有序表元素,说明已经找到合适的插入位置(当前遍历有序表位置的后一个位置j+1),停止遍历
break;
}
}
//有序表遍历完成,将无序表第一个元素插入合适的有序表位置
if (j+1 !=i) arr[j+1] = insertVal;
}
}
}
测试图: