插入排序
设计思路:
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;
}测试结果显示:

本文详细介绍了插入排序的设计思路及实现步骤,通过具体的程序代码演示了如何将一个无序数组变为有序数组的过程。此外还提供了一个测试用例来验证排序算法的有效性。

被折叠的 条评论
为什么被折叠?



