插入排序是简单的排序算法,以下是这个算法的原理,步骤,实现等。
假设待排序数组为 L = { L 0 , L 1 , L 2 , . . . , L i − 1 , L i . . . L n } L=\{ L_0, L_1 , L_2 , ... , L_{i-1} , L_i ...L_n\} L={L0,L1,L2,...,Li−1,Li...Ln} 其中参与排序的第一个元素是 L 1 L_1 L1。元素 L 0 L_0 L0不参与排序。
排序目标是将数组 L L L按照递增顺序排列。
D e f : Def: Def:(一趟插入排序):假设数组的前 i − 1 i-1 i−1 个元素已经按照递增顺序排序,那么将第 i i i 个元素按照递增顺序插入到前 i − 1 i-1 i−1 个元素的数组指定位置,组成一个按递增顺序排列含有 i i i 个元素的数组。这个过程称为一趟插入排序。
插入排序想法:假设数组的第一个元素是排好序的。从第二个元素开始到最后一个元素结束,做 n − 1 n-1 n−1次 “一趟插入排序”。则将待排序数组排序完成。
从 i n d e x = 2... n index=2...n index=2...n做循环:
         \,\,\,\,\,\,\,\, 对 [ L 1 , . . . , L i n d e x ] \left[ L_1,...,L_{index} \right ] [L1,...,Lindex] 做 “一趟插入排序”。
第一种
void insertsort_1 (int* list,int len){
int b,t,pos;
for (b=2;b<=len;b++){
for (t=b;t>=1;t--){
if (list[t]
第二种用 L 0 L_0 L0做交换变量。
void insertsort_2(int *list,int len){
int b,t;
for (b=2;b<=len;b++){
if (list[b]=1;t--){
if (list[t]>list[0])
list[t+1]=list[t];
else
break;
}
list[t+1]=list[0];
}
}
}
下面是测试代码:
#include
void printarry(int *list,int len){
for (int i=0;i<=len;i++)
printf("%d-",list[i]);
printf("\n");
}
// 排序函数定义...
//主函数
int main(){
int anarry[12]={0,2,3,1,6,5,4};
printarry(anarry,6);
insertsort_2(anarry,6);
printarry(anarry,6);
}