原理介绍
插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理是将未排序的元素一个个地插入到已排序的元素中。
具体来说,插入排序的步骤如下:
- 遍历待排序数组,将未排序的元素一个个地插入到已排序的元素中。
- 在插入元素时,从已排序的元素中选择未排序的元素中最小的一个与待插入元素进行比较。如果待插入元素比已排序的元素小,则将其插入到已排序的元素中;如果待插入元素比已排序的元素大,则将已排序的元素中比它小的元素向后移动一个位置,直到找到已排序的元素中比待插入元素小的元素为止。
- 重复以上步骤,直到所有元素均排序完成。
插入排序的时间复杂度为 O(n^2),其中 n 是数组的长度。
优化部分
折半插入优化
注意到插入排序的每一轮向前插入都使得该元素在完成插入后,从第一个元素到该元素是排序状态(指这部分的相对排序状态,在它们中间后续可能还会插入其他数字),利用这一点,对一个新的插入对象向前执行折半插入,能够显著减少比较的次数。另一种优化是增量递减插入排序,也叫 希尔排序 ,将在希尔排序章节中介绍。
折半插入的关键在于找到插入位置,本质上是对排序好的部分进行一个二分查找。