본문 바로가기

정렬

vector 정렬 (cmp 함수)

#include <algorithm> 헤더의

sort 함수는 기본적으로 오름차순 정렬

배열을 sort 한다면 배열의 시작점 주소와 마지막 주소 + 1(end)를 쓴다.

 

sort 함수의 인자에 마지막 cmp 함수를 추가하자!

cmp 함수는 bool type

비교의 기준은 '왼쪽이 오른쪽에 비해서'를 기준으로 삼는다.

즉, return a > b를 하면 내림차순이 될 것이고

return a < b를 하면 오름차순이 될 것이다.

 

 

상어 초등학교의 cmp 함수를 살펴보자

순서대로 가는 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool cmp(POSITION A, POSITION B)
{
    if (A.near_friend == B.near_friend)
    {
        if (A.near_empty == B.near_empty)
        {
            if (A.x == B.x)
            {
                return A.y < B.y;
            }
            return A.x < B.x;
        }
        return A.near_empty > B.near_empty;
    }
    return A.near_friend > B.near_friend;
}
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct jwa
{
    int x;
    int y;
};
 
vector<jwa> jum;
 
bool cmp(jwa A, jwa B)
{
    if (A.y == B.y)
    {
        return A.x < B.x;
    }
    return A.y < B.y;
}
cs

cmp(pair<int,int> A, pair<int,int> B)로 해도 똑같다.

 

https://www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct info {
    int age;
    string name;
    int sunseo;
};
 
vector<info> arr;
 
bool cmp(info A, info B)
{
    if (A.age == B.age)
    {
        return A.sunseo < B.sunseo;
    }
    return A.age < B.age;
}
 
cs

'정렬' 카테고리의 다른 글

수 정렬하기 3  (0) 2023.09.15
기수 정렬(radix sort)  (0) 2023.08.01
병합 정렬  (0) 2023.08.01
퀵 정렬  (0) 2023.04.14