C语言冒泡排序问题求助:10元素数组无法排序
冒泡排序代码错误排查与修正
问题根源
你的冒泡排序逻辑存在核心错误:内层循环的比较和交换操作错误地使用了外层循环变量i,而非内层循环变量j。这导致每次内层循环都只在固定的arr[i]和arr[i+1]位置重复交换,完全没有遍历数组的未排序区间进行相邻元素的逐一比较,因此数组无法被正确排序。
原错误代码段:
if (arr[i] > arr[i + 1]) { tmp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = tmp; }
修正方案
将比较和交换的变量从i替换为j,这样内层循环就能依次遍历当前未排序区间的相邻元素,实现冒泡排序的核心逻辑:
修正后的冒泡排序代码段:
// Bubble sort for (int i = 0; i < DIM - 1; ++i) { for (int j = 0; j < DIM - i - 1; ++j) { // Compare two elements and swap if first > second // Use of tmp variable (temporary) if (arr[j] > arr[j + 1]) { tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } }
完整修正代码
#include <stdio.h> #define DIM 10 int main() { int arr[DIM] = {1, 5, 6, 8, 7, 9, 3, 2, 4, 10}; int tmp; puts("Original array: "); for (int i = 0; i < DIM; i++) { printf("%3d", arr[i]); } // Bubble sort for (int i = 0; i < DIM - 1; ++i) { for (int j = 0; j < DIM - i - 1; ++j) { // Compare two elements and swap if first > second // Use of tmp variable (temporary) if (arr[j] > arr[j + 1]) { tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } puts(""); puts("Ascending order array: "); for (int i = 0; i < DIM; i++) { printf("%3d", arr[i]); } puts(""); }
注:原代码中存在拼写错误Ascending order arrray,已修正为Ascending order array。
内容的提问来源于stack exchange,提问作者user13716820
相关产品推荐
相关产品推荐

