插入排序
文章目录
前言
插入排序在小数据规模还是比较优秀的算法,而且实现也相对简单,这里简单进行介绍
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是插入排序?
插入排序像是我们排序一份扑克牌,对于小的元素向前进行比较,将这个扑克牌插入到合适的位置上。直到手里的牌全部有序。
可以借助这个图片来进行理解(图片来自百度百科):
代码实现
代码如下(示例):
package com.MySort;
import com.MyFunctions.GetRodomArrays;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
// 获取随机数组
int[] arr = GetRodomArrays.acquireUniqueArr(10, 10);
System.out.println(Arrays.toString(arr));
// [8, 0, 9, 3, 2, 6, 1, 5, 7, 4]
// 调用插入排序算法
inserSort(arr,arr.length);
System.out.println(Arrays.toString(arr));
}
private static void inserSort(int[] arr, int length) {
int j;
for (int i = 1; i < length; i++) {
// arr[i]相当于当前发的扑克牌 而【0~i】的牌都是有序排列的
// 先备份当前的扑克牌 因为后面有可能会覆盖掉
int key = arr[i];
// 获取前一个位置 方便进行比较
j = i-1;
// 判断j也就是前一个位置 是否合法 合法在进行比较顺序
while(j>-1&&arr[j]>key){
// 如果前一个位置j比我当前备份的牌要大 则需要进行插入
// 这里采用前面的牌往后面进行覆盖
arr[j+1] =arr[j];
// 盖完之后继续判断j-1位置也就是上上一个位置的牌是否比我当前key要大 所以j要向前推进
j--;
}
// 这里走完之后 j要么走出了边界
// 要么就是走到了小于等于key的前一个位置,所以退一位就是我key应该插入的位置
arr[j+1]= key;
}
}
}
代码相对详细 (简单记录自己的学习 有错误欢迎批评指正)