我在 C++ 中有一个由 20 个整数组成的数组,我想对它们进行洗牌(随机顺序)。
我还想以这样的方式对它们进行排序,使前 10 个数字按升序排列最小,其余的只是随机的。
有没有办法自动做到这一点?
您需要做的是调用stl
函数random_shuffle
和sort
. 这两个函数都采用迭代器,因此您可以为每个函数提供一系列值。
int arr[20] = {some values};
sort(arr, arr+20);
random_shuffle(arr+10, arr+20);
为什么不使用<algorithm>
and<vector>
库?
您可以使用 partial_sort,它完全符合您的要求
#include <iostream>
#include <algorithm>
#include <vector>
bool myfunction (int i,int j) { return (i<j); }
int main () {
int myints[] = {9,8,7,6,5,4,3,2,1};
std::vector<int> myvector (myints, myints+9);
std::partial_sort (myvector.begin(), myvector.begin()+5, myvector.end());
std::partial_sort (myvector.begin(), myvector.begin()+5, myvector.end(),myfunction);
std::cout << "myvector contains:";
for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}