ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • sort 함수 사용법
    잡다한 지식 2020. 3. 25. 13:53

    Algorithm 헤더에 있는 sort 함수에 관하여 정리해보도록 하자.


    sort(배열의 시작점 주소, 배열의 마지막점 주소)

    - 개념 : sort(start, end) , start와 end 범위에 있는 요소들을 오름차순 정렬해주는 함수

               퀵 정렬을 기준으로 함수가 구현되어 있어서, 시간 복잡도는 O(nlogn)이다.

    - 사용법

      크기가 n인 배열 arr, 백터 vec이 있다고 할때

    • sort(arr, arr +n);
    • sort(vec.begin(), vec.end());
    • sort(vec.begin(), vec.end(), cmp);  → 비교함수 cmp를 만드는 경우
    • sort(vec.begin(), vec.end(), greater<자료형>()); → 내림차순 정렬을 사용하는 경우

    greater : 첫번째 인자가 두번째 인자보다 크면 true 반환 (bool) → #include <functional> 추가해야 greater STL 사용가능


    비교함수 만드는 경우를 자세히 살펴보자.

    vector에 인자가 1개면 만들 필요없지만, 인자가 구조체인 경우 혹은 내림 차순을 greater<>() 사용 안할때

    비교함수를 만들어 줘야한다.

    주의할 점은 const와 & 연산자를 사용해야 한다는 점이다.

    (비교하는 과정에서 값의 수정이나 변경이 없으므로)


    코드를 통해 보자.


    1. 내림차순 정렬

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //내림차순 정렬
    bool cmp(const int &a, const int &b) {
        return a > b; 
    }
     
    //다른 식으로 쓴다면?
    bool cmp(const int &a, const int &b) {
        if(a > b) return true;
        else return false;
    }
    cs


    2. 인자가 구조체인 경우

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    struct Point {
        int x, y;
    };
     
    //x를 오름차순으로 정렬하고,x가 같다면 y도 오름차순으로 정렬
    bool cmp(const Point &a, const Point &b) {
        if (a.x < b.x) {
            return true;
        }
        else if (a.x == b.x) {
            return a.y < b.y;
        }
        else {
            return false;
        }
    }
     
    //다른식으로 표현하자면
    bool cmp(const Point &a, const Point &b) {
        if (a.x == b.x) {
           return a.y < b.y;
        }
        else{
            return a.x < b.x;
        }
    }
     
    cs


    '잡다한 지식' 카테고리의 다른 글

    bit-mask  (0) 2020.04.04
    복잡도 표기법  (0) 2020.03.27
    next_permutaion 함수  (0) 2020.03.18
    순열과 조합  (0) 2020.03.18
    자료형  (0) 2020.03.16

    댓글

Designed by Tistory.