C++实现Counting Sort输出错误排查求助
问题排查与解决
你的计数排序核心逻辑本身是正确的,错误根源不在你怀疑的countsort函数内部代码,而是main函数中数组a和b的内存分配方式错误:
a = b = new int[n];
这行代码让指针a和b指向了同一块动态分配的内存区域。当countsort函数往b数组写入排序结果时,实际上是在覆盖a数组的原始数据——而排序过程中还需要读取a的原始值,这就导致后续的排序逻辑基于被篡改的数据,最终输出错误结果。
修正方案
为a和b分别分配独立的内存空间,替换掉错误的内存分配代码:
// 替换原来的a = b = new int[n]; a = new int[n]; b = new int[n];
修正后,a保存原始输入数据,b作为排序结果的存储数组,两者互不干扰,排序逻辑就能正常执行。
验证结果
用你提供的输入数据:
3 4 3 2 0 2 0 0 0 2
修正后的代码会输出正确的排序结果:0 0 0 0 2 2 2 3 3 4,同时也避免了重复释放同一块内存的未定义行为。
内容的提问来源于stack exchange,提问作者user23478603
相关产品推荐
相关产品推荐

