Radix Sort Crashing
Radix Sort Crashing
我认为我的算法做得很好,但当我运行代码时,它会崩溃。我想知道我是否可以用你的眼睛看看我在哪里犯了错误。我想创建一个基数排序来对列表进行排序。
#include <stdio.h>
#include <algorithm>
#include <list>
#include <iostream>
using namespace std;
void radixsort(list<int> s);
int find_max(list<int> t);
void splicing(list<int> s);
void radix_final(list<int> s, int maximum);
int main(int argc, char **argv)
{
list<int>::iterator it;
list<int> x;
x.push_front(40);
x.push_front(60);
x.push_front(20);
x.push_front(10);
x.push_front(10);
radixsort(x);
for (it = x.begin(); it != x.end(); ++it)
cout << ' ' << *it;
cout << 'n';
return 0;
}
void radixsort(list<int> s)
{
int max = find_max(s);
splicing(s);
radix_final(s,max);
}
void radix_final(list<int> s, int maximum)
{
list<int> list0;
list<int> list1;
const int MAX_ITERATOR = sizeof(maximum)*8;
int divisor = 1;
for(int i =0; i<MAX_ITERATOR;i++){
if((s.front()/divisor)%2==0)
{
list0.push_back(s.front());
s.pop_front();
}
else
{
list1.push_back(s.front());
s.pop_front();
}
divisor = 2*divisor;
}
list<int>::iterator it;
it = s.begin();
s.splice(it,list1);
s.splice(it,list0);
}
void splicing(list<int> s)
{
list<int> even;
list<int> odd;
for(unsigned int i = 0; i<s.size();i++)
{
if(s.front()%2 ==0)
{
even.push_back(s.front());
s.pop_front();
}
else
{
odd.push_back(s.front());
s.pop_front();
}
}
list<int>::iterator it;
it = s.begin();
s.splice(it,odd);
s.splice(it,even);
}
int find_max(list<int> t)
{
int max = t.front();
for(unsigned int i = 0; i<t.size();i++)
{
if (t.front() >= max)
{
max = t.front();
}
t.pop_front();
}
return max;
}
void radix_final(list<int> s, int maximum)
{
list<int> list0;
list<int> list1;
const int MAX_ITERATOR = sizeof(maximum)*8;
//^^^ Eh?
int divisor = 1;
for(list<int>::iterator x = s.begin(); x != s.end(); ++x){
if((*x/divisor)%2==0)
list0.push_back(*x);
else
list1.push_back(*x);
divisor = 2*divisor;
}
list<int>::iterator it;
it = s.begin();
s.splice(it,list1);
s.splice(it,list0);
}
void splicing(list<int> s)
{
list<int> even;
list<int> odd;
for(list<int>::iterator x = s.begin(); x != s.end(); ++x){
if( ((*x)%2) == 0)
even.push_back(*x);
else
odd.push_back(*x);
}
list<int>::iterator it;
it = s.begin();
s.splice(it,odd);
s.splice(it,even);
}
int find_max(list<int> t)
{
int max = t.front();
for(list<int>::iterator x = t.begin(); x != t.end(); ++x)
{
if (*x >= max)
{
max = *x;
}
}
return max;
}
是代码的固定版本。我不知道他的算法知道会发生什么;然而,我确实找到了导致崩溃的列表中的问题。这与所有的弹出有关。另外,最大迭代器对我来说毫无意义。
相关文章:
- 为什么 std::unique 不调用 std::sort?
- 对字符串进行排序时,在c++中处理sort()
- std::sort()函数无法对向量的一部分进行排序
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- C++中"std::sort"比较器的不同类型
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 按字母顺序对字符串中的字母进行排序,而无需使用内置的 sort()
- c++无值sort()的问题是什么?
- 将用户定义的类型与 std::vector 和 std::sort 一起使用
- 使用 std::sort 对向量进行稳定排序
- 如何使用 QSortFilterProxyModel::sort 对 Qlist 中的数据进行排序
- std::sort 如何处理重复的数字?
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- C++ <algorithm> 使用对象作为比较定义的 sort()
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- unqualified sort() -- 为什么它在 std::vector 上使用而不是在 std::array 上
- 使用 std::sort 对二维 c 数组进行排序
- std::stable_sort vs std::sort
- std::sort 导致运算符分段错误<
- Radix Sort Crashing