直接插入排序,算法简单,程序易编制,但随着数组长度的增加,搜索时间会增加,移动的元素会增多.因此这种算法适合排序数组长度较短的情况.
初始:23,45,1,0,-45,13,1,34
1: [23],45,1,0,-45,13,1,34
2: [23,45],1,0,-45,13,1,34
3: [1,23,45],0,-45,13,1,34
4: [0,1,23,45],-45,13,1,34
5: [-45,0,1,23,45],13,1,34
6: [-45,0,1,13,23,45],1,34
7: [-45,0,1,1,13,23,45],34
结束:[-45,0,1,1,13,23,34,45]
#include<stdio.h>
/*直接插入排序:待插入目标数组指针,目标数组长度,待插入值*/
void sort(int *buf,int length,int insert){
int i=0;
int j=length;
/*搜索目标数组,在合适元素处停下*/
for (;i<length;i++){
if (*(buf+i)>insert)
break;
}
/*将该元素以后的元素向后移动一个单位*/
while (j>i){
*(buf+j)=*(buf+j-1);
j--;
}
/*将待插值插入该元素位置处*/
*(buf+i)=insert;
}
int main(void){
int buf[]={23,45,1,0,-45,13,1,34};
int i=1;
for (;i<sizeof(buf)/sizeof(int);i++){
sort(buf,i,buf[i]);
}
for (i=0;i<sizeof(buf)/sizeof(int);i++)
printf("%d,",buf[i]);
}