插入排序的原理是将无序数组遍历,将下一个元素按排序规律插入到已经排好的部分中。
在书中给出的伪代码是这样的:
INSERTION-SORT(A)
for j = 2 to A.length
key = A[i]
//Insert A[j] into the sorted sequence A[1..j - 1].
i = j - 1
while i > 0 and A[i] > key
A[i+1] = A[i]
i = i - 1
A[i + 1] = key
将代码换成注释重新填写一遍:
int* sort(***)//传入数组和需要排序的长度(或者需要排序的区间,根据需求改变传参)
{
//第一层循环,循环从第二个元素到最后一个元素,向前面已经排序完毕的子数组中插入
//从第二个元素开始的原因是单一元素肯定是有序的
//定义变量记录当前位置元素
//第二层循环,将大于(或小于)该元素的值全部后移一位
//当找到元素对应的位置后不再后移,直接放入该位置
//最后返回数组
}
最后将注释部分补全,这里用c++举例子:
int* sortA(int* A, int len){
/*
A:需要排序的数组;
len:数组中的元素数量;
*/
for(int j = 1; j < len; j++){
int key = A[j];
int i = j - 1;
while(i >= 0 && A[i] > key){
A[i+1] = A[i];
i = i - 1;
}
A[i + 1] = key;
}
return A;
}
就完成了插入排序