【发布时间】:2018-11-18 16:43:59
【问题描述】:
在这里我有一个列表,我希望它能够成功地“基数排序”它..但是我在list..中的值有问题。
它最初包含
5 4 1 2 3 10 9 8 8 2
但是当我在下面的位置排队时,它突然将list[6]更改为81,list[7]更改为0..
5 4 1 2 3 10 81 0 8 2
我不知道它们为什么会改变,为什么只改变了这两个元素。请帮忙!
#include <iostream>
#include <queue>
Class List
{
private:
int n;
int * list;
public:
List(FILE * _input)
{
fscanf(_input, "%d", &n);
list = new int(n);
for(int i=0; i<n; i++)
{
fscanf(_input, "%d", &list[i]);
}
}
void RadixSort()
{
int div = 1;
queue<int> q[10];
for(int i=0; i<8; i++)
{
for(int j=0; j<n; j++)
{
q[(list[j]/div)%10].push(list[j]);
}
for(int j=0; j<10; j++)
{
int idx=0;
while(!q[j].empty())
{
list[idx++] = q[j].front();
q[j].pop();
}
}
div = div*10;
}
}
};
int main(int argc, char **argv)
{
FILE * input = fopen(argv[1], "r");
List * list = new List(input);
list->RadixSort();
return 0;
}
【问题讨论】:
-
也许是 UB。没有代码就无法回答。
-
感谢您的评论!我编辑了我的问题
-
这个代码有没有可能不是你的问题代码?它不编译。
-
修复编译错误后,我遇到了分段错误。您有内存分配问题。你调试过你的代码吗?
标签: c++ queue radix-sort