2013-02-04 2 views
1

다음 코드에서 sort() 기능은 어떻게 작동합니까? 우리가 배열이있는 경우 예를 들어, :C++의 정렬 함수는 어떻게 작동합니까?

a [5] = {1,2,3,4,5}; 

을 나는 일종의 그것을 내 bool cmp() 기능, 를 사용하여 내림차순으로 내가 알고 싶은 : 작동합니까 방법 int a하는 요소이며 int b 인합니다 (매개 변수는 bool cmp() 함수), 언제 정렬합니까? bool cmp()은 언제 반환합니까? 0은 언제 반환합니까?

#include <iostream> 
#include <algorithm> 

using namespace std; 
bool cmp (int a , int b) 
{ 
    return (a > b); 
} 

int main() 
{ 
    int a[100]; 
    int n; 
    cin >> n; 
    for (int i=0 ; i<n ;i++) 
     cin >> a[i]; 

    sort(a,a+n,cmp); 
    cout << endl << endl; 
    for (int i=0 ; i<n ;i++) 
     cout << a[i] << " "; 



    return 0; 
} 
+5

좋은 C++ 참조를보세요. http://en.cppreference.com/w/cpp/algorithm/sort. –

+2

어떻게 구현되는지 알고 싶으면 포함시킨 헤더 파일 (algorithm)에서 찾으십시오. – us2012

+2

@ us2012 끔찍한 충고입니다. 'std :: sort'는 빠르며 읽을 수 없도록 작성되었습니다. – Yakk

답변

3

구현 방법은 표준 라이브러리의 구현에 달려 있습니다. 복잡성은 O(Nlog(N))입니다. 일반적인 구현은 quicksort 또는 introsort을 사용합니다.

비교 함수는 첫 번째 인수가 2보다 엄격하게보다 작 으면 true을 반환해야하는 이진 함수입니다. 구현에서는이 함수를 사용하여 컨테이너의 두 요소를 비교하여 어떤 컨테이너를 선행해야하는지 판단합니다. 따라서 ab은 컨테이너의 두 요소가 될 수 있습니다. 이 함수는 요소에 대해 엄격한 약한 순서를 지정해야합니다. 즉 :

  • 요소가 자체
  • x < y 것보다 작을 수는 없습니다, y < x
  • x < z

다음, x < y 경우와 y < z 것은 당신이 돈 '하면하는 경우가 아니다 비교 기능을 제공하려면 operator<이 사용됩니다. 마찬가지로, 비교 함수로 std::less을 전달할 수 있습니다.

+0

정말, 정말 까다 롭습니다 : 비교 함수를 제공하지 않으면'std :: less'가 사용됩니다. 'std :: less'는 특수하지 않은 경우 포인터를 제외하고는 포인터를 제외하고는'operator <'를 사용합니다. 포인터는 포인터를 명령합니다 ('<'는 보장하지 않습니다). 이것은 많은 현대 시스템에서 발생합니다 '<'가됩니다. – Yakk

+1

@Yakk 필자의 표준 사본에는 "Compare를 취하는 모든 알고리즘에 대해 대신 operator <"를 사용하는 버전이 있습니다. " 나는'std :: less'를 사용하여 그것에 대해 아무것도 찾을 수 없다. –

+0

젠장 -'std :: less'를 사용하지 않고 포인터에'std :: sort'를 쓰는 것은 나쁜 생각입니다. (글쎄요, 실제는 아닙니다) – Yakk

0

확인 여기 정렬 방법의 참조 : http://en.cppreference.com/w/cpp/algorithm/sort

첫 번째 매개 변수는 시작 포인터이다. 두 번째 매개 변수는 끝 포인터입니다. 세 번째 매개 변수는 선택 사항입니다. 정렬 방법을 정의하는 비교 함수입니다.

+0

링크 전용 답변은 권장하지 않습니다. 귀하의 답변에 기사의 내용을 넣어보십시오! :피 –

관련 문제