【发布时间】:2021-01-13 19:20:46
【问题描述】:
class MySort
{
void bubble(std::vector<int> &vec, std::function<int(int,int)> func)
{ ... } //tihs works
void selectionSort(std::vector<int> &vec, std::function<int(int,int)> func)
{
int vecSize=vec.size();
int i, j, min_idx;
int temp;
for (i = 0; i < vecSize-1; i++)
{
min_idx = i;
for (j = i+1; j < vecSize; j++)
if(func(vec[j],vec[min_idx]) < 0)
min_idx = j;
temp = vec[min_idx];
vec[min_idx] = vec[i];
vec[i] = temp;
}
}
};
我还有另一个 MyData 类:
class MyData
{
std::vector<int> t_;
int sortNormal2(int first, int sec)
{
return first > sec;
}
public :
MyData(std::vector<int> t)
{
std::copy(t.begin(),t.end(),back_inserter(t_));
}
void sortNormal(std::string choice)
{
MySort s;
auto sort= std::bind(&MyData::sortNormal2,this,std::placeholders::_1, std::placeholders::_2);
if(choice == "bubbleSort")
{
std::cout<<"BubbleSort : "<<std::endl;
s.bubble(t_, sort);
}
else
{
std::cout<<"SelectionSort : "<<std::endl;
s.selectionSort(t_, sort);
}
}
上面,我有一个正常排序的函数,并有一个字符串作为参数。我使用了 bind,如果选择是 bubbleSort,它可以正常工作,但如果选择是另一个字符串,它就不起作用,它会打印向量表正常,未排序 主要看起来像这样:
std::vector<int> table{ 244, 57, 78, 331, 9, 212, 6};
MyData data(table);
data.printVec();
std::cout<<std::endl;
data.sortNormal("bubbleSort"); //here if instead of buubleSort i type another string, it doesn't work
data.printVec();
有人知道为什么这个算法不行吗?它什么也没做,我不知道出了什么问题。
【问题讨论】:
-
只有 min_idx = j;在内部 for 循环中。这似乎不太好
-
我编辑过,还是一样的..
-
可能问题出在未显示的代码中。请提供一个我们可以测试的完整示例
-
完成了。现在可以查看了吗?
-
请注意,我使用更简单的测试代码测试了您的 selectionSort,它可以正常工作
标签: c++ selection-sort