算法步骤
- 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
- 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
时间复杂度
算法稳定性
相同元素的前后顺序并没有改变,是一种稳定的排序算法。
参考代码
void insertion_sort(int *number, int n) {
int i = 0, j = 0, temp;
for(i = 1; i < n; i++) {
temp = number[i];
j = i - 1;
while(j >= 0 && temp < number[j]) {
number[j + 1] = number[j];
j--;
}
number[j + 1] = temp;
}
}