C#中实现冒泡排序List<Stad>排序结果异常问题求助
问题排查与修复方案
你的冒泡排序失效主要有两个核心问题,还有一个可优化的点:
1. if语句末尾的多余分号
代码中if (städer[j].Temp > städer[j + 1].Temp);后面的分号是致命错误——它会让if的条件判断变成一个空语句,不管温度比较结果如何,后面的代码块都会无条件执行,完全打乱了排序逻辑。
2. 属性大小写不一致
C#是大小写敏感语言,你在比较时用了Temp(大写开头),但交换时用了temp(小写开头),这两个是不同的属性,相当于用A属性判断排序条件,却交换了B属性,排序自然混乱。
修复后的完整代码
static void bubblesort(List<Stad> städer) { int n = städer.Count - 1; for (int i = 0; i < n; i++) { int färdigSorterade = n - i; for (int j = 0; j < färdigSorterade; j++) { // 去掉分号,统一属性大小写 if (städer[j].temp > städer[j + 1].temp) { // 优化:直接交换整个Stad对象,避免分别交换属性的繁琐和错误 Stad tempStad = städer[j]; städer[j] = städer[j + 1]; städer[j + 1] = tempStad; } } } }
额外优化说明
- 移除了冗余的
n参数,方法内部可直接通过städer.Count获取长度,不需要外部传入 - 直接交换整个
Stad对象,比分别交换namn和temp属性更简洁,也避免了属性名写错的风险
内容的提问来源于stack exchange,提问作者Aron Åkesäter
相关产品推荐
相关产品推荐

