2011-02-24 6 views

답변

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'를 사용할 좋은 이유는 거의 없습니다. –

+3

질문이 @ Jerry의 의견에 대해 자세히 설명하기 위해 C (not C++) –

+5

으로 표시 되었다면 올바른 것이었을 것입니다. 대신에'std :: sort'를 사용해야합니다. – jalf

20
std::vector<int> numbers; 

// get the numbers from the user here.  

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

@ Jerry : 주문을 유지하는 구조를 사용하지 않는 이유는 무엇입니까? –

+1

@Matthieu : 마지막에 한 번만 정렬하는 것이 더 빠를 것 같습니다. –

+0

@kotlinski : 그 점에 동의하고 작은 입력 세트에'vector'를 사용하는 것은 조기에 최적화 된 것처럼 보입니다! 점근 적 성능은 동등한 O (N log N)이므로 코드를 복잡하게 만드는 대신 여기에 일정한 요소를 적용 할 것입니다. –

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

'for (int i : set)'은 C++처럼 보이지 않습니다. –

+1

@kotlinski : C++ 0x 새로운'range-based for' 문 (** 6.5.4 [stmt.ranged] **), 어떤 컴파일러가 이미 구현했는지 모르겠다. –

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

약간의 설명을 추가해보십시오 –

+1

그래서 이것은 단지 옛날 학교 프로그램입니다. for와 goto loops ...이 프로그램의 핵심은 array.min의 다른 인덱스에있는 숫자를 바꿔주는 "i"for 루프입니다. 변수는 가변적입니다 우리가 사용하는 값의 더 쉬운 "전송"에 대한 것입니다. 당신이 그것을 실행할 때 한 줄씩 단계별로 갈 수있는 Visual Studio 나 프로그램을 가지고 있다면 모든 조언에서이 개념을 이해하는 데 도움이 될 것입니다. ..조금 더 길지만 프로그래밍 방식을 개발할 것입니다. –

관련 문제