有序序列L[1...i-1] | L(i) | 无序序列L[i+1...n] |
将元素L(i)插入到已有序的子序列L[i...i-1]中,
大致步骤:从L(i)开始从后向前依次比较,若不符合排序规则则交换,直到符合为止(可能到达序列开始,也可能在中间停止)。
1)空间复杂度:O(1)。
2)时间复杂度:最好:O(n)只需要比较,不需要移动。平均:O(n²)。最坏:O(n²),例如与排序规则相反。
3)稳定性:稳定。
例如:
#include <stdio.h>
int a[10] = {6, 3, 9, 2, 1, 8, 5, 7, 4,0};
void InsertSort(){
int i,j;
for(i=1;i<10;i++){
for(j=i;j>0;j--){
if(a[j]<a[j-1]){
int temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}else{
break;
}
}
}
}
int main(){
int i;
InsertSort();
for(i=0;i<9;i++){
printf("%d<",a[i]);
}
printf("%d",a[9]);
return 0;
}