You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:20:26