插入排序(insert sort)是一种简单直观的排序方法。通过从前到后遍历数组,找到当前位置元素在已排序数组中的位置进行插入,将大于当前位置的元素全部向后移动一位,腾出一个插入的位置给当前元素。
//插入排序
void insertSort(vector<int>& nums)
{
for (int i = 1; i < nums.size(); i++)
{
int key = nums[i];
int j = i - 1;
while (j >= 0 && nums[j] > key)
{
nums[j + 1] = nums[j];
j--;
}
nums[j + 1] = key;
}
}
插入排序是一种稳定的排序算法,即不会改变相同元素的相对位置,它的时间复杂度跟数据的情况有关:
最坏情况:元素倒序,O().。
最好情况:有序,O(n),只需要进行n-1次比较即可。
平均情况下:需要进行部分比较和移动操作,时间复杂度为 O(n2)。