2011-02-24 57 views
7

如果我有用户输入10个随机数,我想从最小到最大的顺序排列,使用最基本的C++语言来做这件事的最好方法是什么。C++排序从最小到最大的数字

+5

提示: http://www.cplusplus.com/referen ce/algorithm/sort/ – 2011-02-24 08:18:32

回答

13
#include <vector> 
#include <iostream> 
#include <algorithm> 

using namespace std; 

int main() { 

    vector<int> vec; 

    vec.push_back(1); 
    vec.push_back(4); 
    vec.push_back(3); 
    vec.push_back(2); 

    sort(vec.begin(), vec.end()); 

    for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) { 
     cout << *it << " "; 
    } 
    cout << endl; 
    return 0; 
} 
-7

你可以自己写一些东西,但真的应该使用qsort函数。

+8

恰恰相反。在C++中很少(从来没有?)使用'qsort'的好理由。 – 2011-02-24 08:20:36

+3

如果问题标记为C(而不是C++) – 2011-02-24 08:23:14

+5

来阐述@Jerry的评论,那么你应该是正确的,而应该使用'std :: sort'。 – jalf 2011-02-24 08:23:44

20
std::vector<int> numbers; 

// get the numbers from the user here.  

std::sort(numbers.begin(), numbers.end()); 
+0

@Jerry:为什么不使用维持排序的结构? – 2011-02-24 08:50:29

+1

@Matthieu:最后一次排序可能会更快。 – 2011-02-24 08:53:36

+0

@kotlinski:虽然我同意这个观点,并且对小输入集合使用'vector',但它看起来还不成熟!渐近性能相当于O(N log N),所以你需要在这里考虑常量因子,代价是复杂的代码。 – 2011-02-24 09:23:51

0

这取决于您的要求。如果你只是想对它们进行排序,并且速度只是中等的关注,那么插入排序对于这样一个小的n值是很好的(10)。快速实施(从头开始),适用于小型套装尺寸。

2

使用维护的结构顺序:std::multiset

#include <iostream> 
#include <set> 

#include <boost/lexical_cast.hpp> 

int main(int argc, char* argv[]) 
{ 
    std::multiset<int> set; 

    for (int i = 1; i != argc; ++i) { 
    set.insert(boost::lexical_cast<int>(argv[i])); 
    } 

    for (int i: set) { std::cout << i << " "; } 
    std::cout << "\n"; 
} 

调用:

$ yourprogram 1 5 4 6 7 82 6 7 8 

(注:不限制参数的个数)

+0

'。 – 2011-02-24 12:51:54

+1

@kotlinski:C++ 0x新'基于范围的'语句(** 6.5.4 [stmt.ranged] **),我不知道是否有编译器已经实现它。 – 2011-02-24 13:42:17

0
//this is sorting min--->max without pointers 
    #include<iostream> 
    using namespace std; 
    int main() 
    {int n; 
    cout<<"How much numbers you wanna sort? "<<endl; 
    cin>>n; 
    int broj[n]; 
    cout<<"Enter numbers: "<<endl; 
    for(int k=0;k<n;k++) 
    { 
    cin>>broj[k]; 
    } 
    int min=0; 
    for(int z=0;z<n;z++) 
    { 
    loop: 
    min=broj[z]; 

    for(int i=z;i<n;i++) 
    { 
     if(min<=broj[i]) 
     { 
     } 
     else 
     { 
      min=broj[i]; 
      broj[i]=broj[z]; 
      broj[z]=min; 
      goto loop;   
     } 
    } 
    } 
    cout<<endl<<"--------------"<<endl; 
    for(int j=0;j<n;j++) 
    { 
    cout<<broj[j]<<endl; 
    } 
    return 0; 
    } 
+0

尝试添加一些解释 – 2016-02-05 20:50:53

+1

所以这只是旧学校程序只是如果,为和goto loops..so这个程序的核心是在这个“我”for循环,它取代了数组上的不同索引上的数字..min是可变的我们使用它来更容易地“传输”这些值。如果您有视觉工作室或某些可以一步一步(逐行)运行它的程序,那么在我所有的建议中都会这样做,这将有助于您理解这一概念。 ..它有点长,但有了这个,你将开发你的编程思维方式 – 2016-02-05 21:03:43

相关问题