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
相关产品推荐
相关产品推荐

