插入排序
设计思路:
1.判断数组元素个数,如果数据元素个数小于等于1,无需进行排序,直接返回;
2.若数组元素个数大于1,设置边界下标值bound = 1,将整个数组分为俩个数组部分,一部分为有序数组,另一部分为无序数组;
3.再定义一个下标值cur = bound,将下标为cur的所指数组元素与有序数组的元素进行比较,在数组中找到合适的位置;
4.首先将下标为cur的元素使用将有序数组中大于bound_value进行保存,然后将大于bound_value的元素从后向前依次向后移动一个元素,最后将bound_value插入合适的位置,并将bound++进入下一轮的循环;
5.当bound等于数组元素个数值size时,循环结束;
6.此时的数组就是一个有序数组。
插入函数程序代码:
//插入函数
void InsertSort(int array[],size_t size){
if(array == NULL){
//非法输入
return;
}
if(size <= 1){
//无需排序
return;
}
size_t bount = 1;
for(;bount<size;++bount){
int bount_value = array[bount];
size_t cur = bount;
for(;cur >0;--cur){
if(array[cur-1] > bount_value){
array[cur] = array[cur - 1];
}else{
//找到量合适的位置
break;
}
}
array[cur] = bount_value;
}
return;
}
测试用例程序代码:
void TestInsertSort(){
int array[] = {1,3,2,6,8};
size_t size = sizeof(array)/sizeof(array[0]);
int i = 0;
for(;i<size;++i){
printf("%d ",array[i]);
}
printf("\n");
InsertSort(array,size);
i = 0;
for(;i<size;++i){
printf("%d ",array[i]);
}
printf("\n");
}
//主函数
int main(){
TestInsertSort();
return 0;
}
测试结果显示: