为何我实现的插入排序算法输出值的地址而非正确结果?
插入排序问题修复
代码里的两个核心问题
- 内层循环缺少终止条件:当
temp >= a[j]时,本该停止移动元素,但原代码会一直循环到j=-1,导致每次都把temp插到数组最开头,完全起不到排序作用 - 所谓“返回值的地址”是输出方式错误:C语言里直接打印数组名(比如
printf("%d", a)),数组名会退化为指针地址,必须遍历数组逐个打印元素
修正后的插入排序代码
void insertion_sort(int a[], int size){ int i,j,temp; for(i=1;i<size;i++){ temp = a[i]; // 内层循环添加条件:temp小于当前元素时才继续移动 for(j=i-1;j>=0 && temp < a[j];j--){ a[j+1] = a[j]; } a[j+1] = temp; } }
正确的数组输出示例
排序后要打印结果,得遍历数组元素:
int arr[] = {3,1,4,2}; int size = sizeof(arr)/sizeof(arr[0]); insertion_sort(arr, size); // 逐个打印数组元素 for(int k=0;k<size;k++){ printf("%d ", arr[k]); }
内容的提问来源于stack exchange,提问作者Geetika Kalia
相关产品推荐
相关产品推荐

