2011-02-24 62 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