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

C# MVC环境下快速排序无结果输出问题排查求助

排查C#快速排序无输出结果的问题

嘿,我看了你这段快速排序的代码,能理解你碰到这种没报错但没输出的情况有多头疼——毕竟同环境下归并排序都正常跑。咱们一步步拆解问题所在:

几个关键错误点

  • 第二个while循环索引误用:原代码里第二个while判断的是char.Parse(ListLetters[i]) > pivot,但这里应该用ListLetters[j]!你要找的是右侧区间里比pivot小的元素,结果一直拿左侧的i索引元素来判断,这会导致逻辑完全混乱,甚至可能让循环卡死,排序根本无法正常执行。
  • Pivot取值错误:你现在取的是原始Word字符串的中间字符Word[(left + right)/2],但Word从始至终都没被修改过,而你实际要排序的是ListLetters列表。递归过程中ListLetters的元素已经被交换,pivot却还是从原始字符串里拿,这完全不符合快速排序的逻辑,应该从ListLetters当前区间的中间位置取元素。
  • 递归内重复拼接字符串:你把拼接arrangedSort的foreach循环放在了aQuicksort方法内部,每次递归调用都会执行一次拼接。这不仅会让字符串被重复拼接N次,而且递归过程中ListLetters还没完成排序,拼接出来的结果也是混乱的。正确做法是等整个递归排序完成后,再去拼接最终结果。
  • 冗余参数传递:aQuicksort方法里的Word参数完全没用,你排序的是ListLetters,传原始Word进去只会混淆逻辑,应该删掉这个参数。

修正后的代码

public string QuickSort() { 
    string arrangedSort = ""; 
    string word = "cdabe"; 
    List<string> listLetters = new List<string>(); 
    for (int i = 0; i < word.Length; i++) { 
        listLetters.Add(word.Substring(i, 1)); 
    } 
    // 调用修正后的快排方法,无需传递原始word参数
    aQuicksort(listLetters, 0, listLetters.Count - 1); 
    
    // 排序完成后再拼接最终结果
    foreach (var letter in listLetters) { 
        arrangedSort += letter; 
    }
    return arrangedSort; 
}

// 修正后的快排方法,接收要排序的列表作为核心参数
private void aQuicksort(List<string> listLetters, int left, int right) { 
    int i = left; 
    int j = right; 
    // 从当前排序区间的列表中取pivot,转成char简化比较逻辑
    char pivot = char.Parse(listLetters[(left + right) / 2]); 
    
    while (i <= j) { 
        // 左侧找到第一个>=pivot的元素
        while (char.Parse(listLetters[i]) < pivot) i++; 
        // 右侧找到第一个<=pivot的元素(修正了索引j的使用)
        while (char.Parse(listLetters[j]) > pivot) j--; 
        
        if (i <= j) { 
            // 交换左右指针指向的元素
            var tmp = listLetters[i]; 
            listLetters[i] = listLetters[j]; 
            listLetters[j] = tmp; 
            i++; 
            j--; 
        } 
    } 
    // 递归处理左右子区间
    if (left < j) aQuicksort(listLetters, left, j); 
    if (i < right) aQuicksort(listLetters, i, right); 
}

额外优化建议

  • 可以把List<string>改成List<char>,这样不需要每次调用char.Parse,代码更简洁且效率更高。
  • 字符串拼接建议用StringBuilder代替直接+=,尤其是处理较长字符串时,能显著提升性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:02:34