배열 정렬 시 인자로 포인터 2개, vector 정렬 시 인자로 iterator 2개를 넘겨준다.
int a[5] = {1, 4, 5, 2, 7};
sort(a, a+5);
vector<int> b = {1, 4, 5, 2, 7};
sort(b.begin(), b.end()); // 또는 sort(b.begin(), b.begin()+5)
Quick sort를 기반으로 하지만 리스트가 불균등하게 쪼개지는 상황이 반복되어 재귀에서의 깊이가 너무 깊어지면 이 보장되는 정렬 알고리즘으로 나머지를 처리하기 때문에 최악의 경우에도 시간복잡도는 로 보장된다. 다만, stable sort가 아니므로 동일한 우선순위를 가진 원소들 사이의 상대적인 순서가 보존되지 않을 수 있기 때문에 stable sort가 꼭 필요하다면 stable_sort 함수를 사용한다.
pair와 tuple은 먼저 가장 앞에 있는 원소의 대소를 비교하고, 값이 같으면 그 다음 원소의 대소를 비교하는 방식이다. ex. 좌표 정렬 or 기타 여러 속성이 있는 원소 정렬
int형을 5로 나눈 나머지가 작은 순으로, 나머지가 같다면 크기가 작은 순으로 정렬해보자
bool cmp(int a, int b){
if(a % 5 != b % 5) return a % 5 < b % 5;
return a < b;
}
int a[7] = {1, 2, 3, 4, 5, 6, 7}; // 오름차순으로 정렬된 상태
sort(a, a+7, cmp); // 비교함수를 인자로 넘겨준다.
// 결과 : 5(0), 1(1), 6(1), 2(2), 7(2), 3(3), 4(4)
a % 5 < b % 5이면 출력 순서는 a ba % 5 > b % 5이면 출력 순서는 b a/* 문제 : 내림차순으로 수열 출력하기 */
// 잘못된 풀이
bool cmp(int a, int b){
if(a >= b) return true;
return false;
}
// 올바른 풀이
bool cmp(int a, int b){
return a > b;
}
bool cmp(const string& a, const string& b){
return a.back() < b.back();
}