学习资料:《算法笔记》
直接插入排序(Straight Insertion Sort)是将一个个元素插入有序部分的过程。
描述:
对于一个序列A[1]~A[n],令i从2开始枚举,循环n-1趟操作。
例如,当进行到第 j 趟时,此时在A[ j ]之前的A[ 1 ] ~ A[ j-1 ]已经有序,那么A[ j ]就从后往前枚举已有序部分找某个位置,使得当A[ j ]插入后(有序部分在插入位置及其后面的元素会往后移一位),A[ 1 ] ~ A[ j ]有序。
初始有序部分长度为1,每执行一趟使得有序部分长度+1,执行完n-1趟后,实现整个序列有序。
代码实现:
void insert_sort(){
for(int i = 2; i <= n; i ++ ){ //循环n-1趟
int tmp = a[i]; //将a[i]存下来
int j = i; //j从i的位置开始往前枚举
while(j > 1 && tmp < a[j - 1]){
a[j] = a[j - 1]; //往后移一位
j--;
}
a[j] = tmp;
}
}
算法分析:
时间复杂度:平均O(n2),最好O(n), 最坏O(n2)
空间复杂度:O(1)
稳定性:稳定