从最低到最高对随机生成的数字进行排序

时间:2013-04-01 19:57:16

标签: c++

这是我的代码:

#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;

int main()
{
    srand((unsigned) time(0));
    int random_integer;
    int lowest =- 10, highest = 10;
    int range = (highest-lowest) + 1;
    for(int index = 0; index < 20; index++) {
        random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
        cout << random_integer << ' ';
    }

    cout << "\n=============== \n";
    system("pause"); 
}

如何对计算机生成的数字进行排序,并将它们从最低到最高排列,然后打印出第二个最高数字? 谢谢。

4 个答案:

答案 0 :(得分:3)

有两个选项 - 记住std::vector中生成的所有数字,然后在其上调用std::sort并打印第二个数字。这在内存和时间上都是次优的。

第二个(也是首选)选项是记住临时变量中最低的两个数字,并在生成后续随机数时对其进行调整。 (或者使用std::partial_sort,但在这种情况下看起来有点过分了。)

答案 1 :(得分:0)

不是直接在for循环中打印数字,而是将号码添加到std::vector<>。然后,您可以调用std::sort()对矢量进行排序。

答案 2 :(得分:0)

您应该考虑使用<algorithm>来帮助您在向量中创建随机数,然后简单地对向量进行排序:

#include <algorithm>
#include <vector>

int myRandomFunction() {
   ...
}

/* Preallocate some space */
std::vector<int> values(100);
std::algorithm::generate(values.begin(), values.end(), myRandomFunction);
std::sort(values.begin(), values.end());

答案 3 :(得分:0)

您可以使用vectorsort()执行此类操作:

#include <iostream>
#include <time.h>
#include <cstdlib>
#include <vector>
#include <algorithm>

using namespace std;
int main()
{
    vector<int> v;
    srand((unsigned)time(0));
    int random_integer;
    int lowest=-10, highest=10;
    int range=(highest-lowest)+1;
    for(int index=0; index<20; index++){
        random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
        v.push_back(random_integer);
        //cout << random_integer << ' ';
    }
    sort(v.begin(),v.end());
    cout << endl << v[v.size()-2] << endl;

    cout<<"\n=============== \n";
    system("pause"); 
}

这只打印出第二高的数字:

#include <iostream>
#include <time.h>
#include <cstdlib>
#include <algorithm>

using namespace std;
int main()
{

    srand((unsigned)time(0));
    int random_integer;
    int lowest=-10, highest=10;
    int a=lowest,b=lowest;
    int range=(highest-lowest)+1;
    for(int index=0; index<20; index++){
        random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
        cout << random_integer << ' ';
        if(a<random_integer) 
        {
            a=random_integer;
            continue;
        }
        if(b<random_integer) 
        {
            b=random_integer;
            continue;
        }
        //cout << random_integer << ' ';
    }
    cout << endl << min(a,b) << endl;

    cout<<"\n=============== \n";
    system("pause"); 
}