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

C# 冒泡排序(BubbleSort)算法运行结果异常问题求助

问题根因

你的冒泡排序逻辑错误出在交换标记getSwapper的重置规则不符合要求。

错误原因

冒泡排序的标记位作用是记录当前单轮遍历是否发生过交换:

  • 每轮遍历开始前必须先把标记位重置为false
  • 只有本轮遍历过程中发生元素交换时,才把标记位设为true
  • 单轮遍历结束后如果标记位仍为false,说明数组已经完全有序,可以直接退出循环

你的代码仅在初始化时将getSwapper设为true,进入while循环后从未重置该标记,仅在发生交换时将其设为true。这就导致:

  • 只要第一轮发生过交换,getSwapper会永远保持true,循环永远不会自动退出
  • 你目前看到的输出只是第一轮冒泡的结果:最大的元素23被交换到数组末尾,其余元素还未完成排序,你只是手动按了一次按键终止了循环而已,哪怕你一直按键让循环继续运行,排序完成后也会进入死循环。

修正方案

在while循环内部的第一行添加getSwapper = false;即可,修正后的核心代码如下:

bool getSwapper = true;
while (getSwapper)                                          
{
    // 新增:每轮冒泡开始前重置交换标记
    getSwapper = false;
    for (int i = 1; i < randomNumbers.Length; i++)          
    {
        int tempNumber = 0;
        if (randomNumbers[i - 1] > randomNumbers[i])
        {
            tempNumber = randomNumbers[i - 1];              
            randomNumbers[i - 1] = randomNumbers[i];        
            randomNumbers[i] = tempNumber;                  
            getSwapper = true;
        }
    }
    // 输出每轮排序结果的逻辑保持不变
    for (int i = 0; i < randomNumbers.Length; i++)
    {
        Console.Write(" " + randomNumbers[i]);              
    }
    Console.WriteLine();
    Console.ReadKey();
}

内容的提问来源于stack exchange,提问作者Ceraxes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 03:15:02