实现选择排序与载体(Implementing selection sort with vectors

2019-09-27 05:50发布

我试图实现一个使用排序选择排序随机生成的载体功能。 我想一个简单的方式只是为了看看,如果我能得到它的正常工作。 这里是我的尝试:

void selection_sort(std::vector<int>& v)
{
    int pos, min, i;
    //std::vector<int>::iterator pos, min, i;

    for( pos = v[0]; pos < v[30]; ++pos)
    {
        min = pos;

        for( i = v[pos + 1]; i < v[30]; ++i)
        {   
            if( i < min)
            {
                min = i;
            }
        }

        if( min != pos)
        {   
            std::swap(v.at(min), v.at(pos));

        }
    }
}

出于某种原因,但是当我再次显示向量,所有的元素都在以相同的顺序,因为他们原本。 我如果我不使用我不知道std::swap正确,或者如果我的选择排序是不正确写入。 我相信答案是十分容易的,但我无法看到它。 感谢您的帮助提前。

Answer 1:

你的问题是,你试图基地附近的实际值的循环的载体,而不是在向量的索引。

所以,如果您的载体是随机生成的,你这样说:

for( pos = v[0]; pos < v[30]; ++pos)

有一个机会,以v的值[0]大于V [30]大。 因此,循环将永远不会运行。 我看到在这个循环同样的问题:

for( i = v[pos + 1]; i < v[30]; ++i)

所以,我建议使用索引的实际的循环。 尝试是这样的:

for( pos = 0; pos < 30; ++pos)
{
  min = v[pos];

等等...

编辑:正如下面提到的,它也将是更好的基础你的矢量大小的循环。 然而,为了节省你的自我从调用昂贵的大小()方法,每次循环运行时,只要抓住大小在循环开始之前。 例如:

size_t size = v.size();
for(size_t pos = 0; pos < size; ++pos)


Answer 2:

你应该用0pos+1v.size()为终点在你for -loops。



文章来源: Implementing selection sort with vectors