具有特定要求的C ++数组排序/混洗

时间:2013-10-08 16:29:51

标签: c++ arrays sorting

我在C ++中有一个包含20个整数的数组,我想将它们随机化(随机顺序)。

我还想以这样的方式对它们进行排序:10个第一个数字按升序排列最小,其余数字只是随机数。

有没有办法自动做?

2 个答案:

答案 0 :(得分:3)

您需要做的是致电stl函数random_shufflesort。这两个函数都使用迭代器,因此您只能为每个函数提供一系列值。

int arr[20] = {some values};
sort(arr, arr+20);
random_shuffle(arr+10, arr+20);

答案 1 :(得分:1)

为什么不使用<algorithm><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;
}