首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >std::nth_element和std::sort之间的实际区别是什么?

std::nth_element和std::sort之间的实际区别是什么?
EN

Stack Overflow用户
提问于 2012-04-27 22:23:37
回答 4查看 13.2K关注 0票数 27

我一直在研究std::nth_element算法,显然:

重新排列范围[first,last)中的元素,使得结果第n个位置的元素是排序序列中该位置的元素,其前面的元素都不大于,后面的元素也都不小于它。它前面的元素和后面的元素都不保证是有序的。

但是,使用我的编译器,运行以下命令:

代码语言:javascript
运行
复制
    vector<int> myvector;
    srand(GetTickCount());

    // set some values:
    for ( int i = 0; i < 10; i++ )
        myvector.push_back(rand());

    // nth_element around the 4th element
    nth_element (myvector.begin(), myvector.begin()+4, myvector.end());

    // print results
    for (auto it=myvector.begin(); it!=myvector.end(); ++it)
        cout << " " << *it;

    cout << endl;

始终以与std::sort完全相同的方式返回完全排序的整数列表。我是不是遗漏了什么?这个算法有什么用呢?

编辑:好的,下面的例子使用了一个更大的集合,显示出有很大的区别:

代码语言:javascript
运行
复制
    vector<int> myvector;
    srand(GetTickCount());

    // set some values:
    for ( int i = 0; i < RAND_MAX; i++ )
        myvector.push_back(rand());

    // nth_element around the 4th element
    nth_element (myvector.begin(), myvector.begin()+rand(), myvector.end());

    vector<int> copy = myvector;
    std::sort(myvector.begin(), myvector.end());

    cout << (myvector == copy ? "true" : "false") << endl;
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10352442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档