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

基于指针实现冒泡排序的问题:内层循环无法正常迭代

问题分析与修复代码

你的代码核心问题是内外层循环共用了同一个指针变量myarr:

  • 内层循环执行时,myarr会一直移动到endptr2的位置
  • 外层循环接着执行myarr++,直接让myarr超过endptr,导致外层循环只跑一次,完全没法完成多轮冒泡排序的逻辑

下面是修复后的代码,用独立的指针分别处理内外层循环,同时优化了冒泡排序的边界逻辑:

#include<iostream>
using namespace std;

int main() {
    int arr[] = { 8, 6, 11, 3, 15, 5 };
    // 计算数组长度,避免硬编码
    int size = sizeof(arr) / sizeof(arr[0]);
    int* start = arr;
    // endptr2标记每轮需要比较的最后一个元素的前一位(因为要比较current和current+1)
    int* endptr2 = arr + size - 1;

    // 外层循环:每轮把最大的元素沉到当前未排序部分的末尾
    while (endptr2 > start) {
        int* current = start;
        // 内层循环:遍历当前未排序部分,比较相邻元素
        while (current < endptr2) {
            if (*current > *(current + 1)) {
                swap(*current, *(current + 1));
            }
            current++;
        }
        // 每轮结束后,末尾的元素已经有序,缩小未排序范围
        endptr2--;
    }

    // 打印排序后的数组验证结果
    for (int* p = arr; p < arr + size; p++) {
        cout << *p << " ";
    }
    cout << endl;

    return 0;
}

关键修改说明

  • 内外层循环使用独立指针:外层用endptr2控制未排序范围,内层用current遍历,互不干扰
  • 优化边界条件:内层循环只需要遍历到endptr2(即未排序部分的倒数第二个元素),避免越界访问
  • 去掉硬编码的数组长度,用sizeof计算,提升代码通用性
  • 添加了排序结果打印,方便验证正确性

运行这段代码会输出:3 5 6 8 11 15,符合冒泡排序的预期结果。

内容的提问来源于stack exchange,提问作者Muhammad Abdullah BSCS 2022 FA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:25:21