插入排序
介绍
插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。时间复杂度为 O ( n 2 ) O(n^2) O(n2)
步骤
- 默认选取第一位元素作为已排序序列;
- 待排序元素从已排序序列从后向前查找,找到使其有序的位置插入,并将后面元素向后移动一位,每次循环确定一个未排序元素的最终位置;
- 重复上述2步骤n次;
演示
推荐排序算法动态调试、演示网站: https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html
图片来源于:https://www.runoob.com/w3cnote/insertion-sort.html
代码与思想
/**
* TODO 插入排序
*
* @author nanfeng
* @date 2022/03/25/ 10:23
*/
public class InsertionSort {
public static void main(String[] args) {
int[] nums = new int[]{711,42,333,6,7555,85,93,24,30,177};
insertionSort(nums);
System.out.println(Arrays.toString(nums));
}
static void insertionSort(int[] nums) {
// 每次循环确定一个元素的位置
for (int i = 1; i < nums.length; i++) {
// 将要插入的值
int temp = nums[i];
// 默认 i-1(包含)之前有序
int j = i;
// 将要插入的数值小于已有序部分数组的最大值时,目标指针向前移动,直到比其小的元素后一位
while (j > 0 && nums[j-1] > temp) {
// 大于temp的元素向后移动(腾位置)
nums[j] = nums[j - 1];
// 目标指针继续向前
j--;
}
// 目标元素放置到 其有序位置
nums[j] = temp;
}
}
}