#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 |
https://www.acmicpc.net/problem/11651
11651번: 좌표 정렬하기 2
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
x 좌표가 같으면 y 좌표가 증가하는 건
cmp 함수가 필요없다.
반대는?
cmp 함수가 필요하다
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 |