系列文章目录
提示: 以下是其他排序算法的链接🔗
文章目录
- 系列文章目录
- 什么是插入排序?
什么是插入排序?
插入排序(Insertion Sort)是一种简单直观的排序算法,它将待排序的序列分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的正确位置,直到所有元素都被插入到正确的位置为止。
插入排序的步骤如下:
- 从第二个元素开始,将其视为已排序部分。
- 取出下一个元素,在已排序部分从后往前进行比较。
- 如果已排序部分的元素大于取出的元素,则将该元素后移一位,继续比较前一个元素。
- 重复步骤3,直到找到已排序部分的元素小于或等于取出的元素的位置。
- 将取出的元素插入到找到的位置。
- 重复步骤2至步骤5,直到所有元素都被插入到正确的位置。
插入排序的时间复杂度为O(n^2),其中n是待排序序列的长度。尽管插入排序的时间复杂度较高,但对于小规模的数据或基本有序的数据,插入排序的性能较好。
代码模板(示例):
class Solution {
public int[] sortArray(int[] nums) {
insertSort(nums);
return nums;
}
/**
* 插入排序,不断地将较小值插入到前面
* 稳定
* O(N^2)
*/
public static void insertSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; i++) {
int indexVal = arr[i];// 要插入的值
int index = i - 1;// 要插入的位置
while (index >= 0 && indexVal < arr[index]) {// 选择合适的位置,数组往后挪一个位置
arr[index + 1] = arr[index];
index--;
}
// 插入到指定的位置后面 i + 1
arr[index + 1] = indexVal;
}
}
}