思想:1. 从第一个元素开始,认为该元素已经是排好序的。
2. 取下一个元素,在已经排好序的元素序列中从后向前扫描。
3. 如果已经排好序的序列中元素大于新元素,则将该元素往右移动一个位置。
4. 重复步骤3,直到已排好序的元素小于或等于新元素。
5. 在当前位置插入新元素。
6. 重复步骤2。
程序:
template<classT>
void InsertSort(T *x,constintN)
{
for(inti = 1; i<N; i++)
{
Ttemp = x[i];
intj;
for(j= i-1; j>=0 && temp<x[j];j--)
{
x[j+1]= x[j];
}
x[j+1]= temp;
}
}
分析:
稳定性:插入排序在两数相等的情况下不交换位置,所以是稳定的。
时间复杂度:最差时间复杂度 O(n²),最优时间复杂度 O(n),平均时间复杂度 O(n²)
辅助空间复杂度 :O(1) ,一个临时变量