怎样实现插入排序算法

插入排序(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;
    }
}

算法流程:

  1. 从第二个元素开始,第一个元素默认已排序。
  2. 拿出未排序的元素值value。
  3. 从已排序序列末尾开始扫描,找到小于value的元素。
  4. 将大于value的元素向后移一位。
  5. 在移出的位置插入value。
  6. 重复步骤2-5,直到全部插入完成。

时间复杂度O(n2),空间复杂度O(1)。
所以,插入排序的关键是:

  1. 从第二个元素开始,第一个元素默认已排序。
  2. 拿出未排序元素,在已排序序列找到插入位置。
  3. 后续元素向后移动,空出插入位置。
  4. 插入元素到插入位置。
  5. 重复步骤2-4,直到全部元素插入完成。
    通过不断插入未排序元素到已排序序列, 最终得到完全排序的数组。