C语言数组冒泡排序异常:仅从第5位元素开始排序,前0-4位无效果
冒泡排序异常问题定位
核心问题成因
冒泡排序函数的内层循环起始下标设置错误,是前5个元素无法正常排序的直接原因:
- 冒泡排序每一轮遍历需要从第1个相邻对(对应
j=1,即比较array[0]与array[1])开始,逐次比较相邻元素 - 当前代码的内层循环写为
for(j = i+1 ; j < len ;j++),当外层循环变量i≥4时,j的起始值为i+1≥5,此时仅会比较下标≥4的相邻元素,完全不会覆盖索引0-3的相邻对,导致前5个元素的顺序再也无法调整 - 内层循环未设置已排序的终止边界,每轮都会重复遍历末尾已排好的元素,进一步放大了逻辑错误的影响
修正方案
将bubble_sort_elements函数的循环逻辑修改为标准冒泡写法:
void bubble_sort_elements(int array[],int len) { int i=0,j=0; // 外层循环控制排序轮数,共需len-1轮即可完成全排序 for (i = 0; i < len - 1; i++) { printf("Number of Iteration: %d \n",i); // 内层循环从第1个相邻对开始,每轮仅遍历到未排序区间的末尾(最后i个元素已排好) for(j = 1 ; j < len - i ;j++) { if(array[j] < array[j-1]) { swap(&array[j],&array[j-1]); } } } }
其他可优化点
main函数中提示语为“请输入5个元素”,但实际循环读取了10个元素,需保持提示与实际逻辑一致- 最小值位置输出的代码
sizeof(arr)/sizeof(arr[0])-sizeof(arr)/sizeof(arr[0])结果恒为0,写法冗余,可直接替换为0
内容的提问来源于stack exchange,提问作者EslamFayad
相关产品推荐
相关产品推荐

