插入排序(Insertion Sort)是一种简单的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
我们可以实现插入排序算法如下:
public void insertionSort(int[] nums) {
for (int i = 1; i < nums.length; i++) {
int value = nums[i];
int j = i - 1;
// 寻找插入位置
while (j >= 0 && nums[j] > value) {
nums[j + 1] = nums[j];
j--;
}
// 插入数据
nums[j + 1] = value;
}
}
算法流程:
- 从第二个元素开始,第一个元素默认已排序。
- 拿出未排序的元素值value。
- 从已排序序列末尾开始扫描,找到小于value的元素。
- 将大于value的元素向后移一位。
- 在移出的位置插入value。
- 重复步骤2-5,直到全部插入完成。
时间复杂度O(n2),空间复杂度O(1)。
所以,插入排序的关键是:
- 从第二个元素开始,第一个元素默认已排序。
- 拿出未排序元素,在已排序序列找到插入位置。
- 后续元素向后移动,空出插入位置。
- 插入元素到插入位置。
- 重复步骤2-4,直到全部元素插入完成。
通过不断插入未排序元素到已排序序列, 最终得到完全排序的数组。