안 쓰던 블로그

std::sort 정렬 기준 바꾸기 본문

알고리즘/Algorithm

std::sort 정렬 기준 바꾸기

proqk 2019. 5. 12. 15:40
반응형

문제 풀 때마다 맨날 헷갈려서 정리했음

 

1. 일반 배열 내림차순 정렬

#include <stdio.h>
#include <algorithm>
using namespace std;
int n, a[10];
bool compare2(const int&x, const int&y) {
	return x > y;
}
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &a[i]);
	}
	sort(a, a + n, compare2);
	for (int i = 0; i < n; i++) {
		printf("%d\n", a[i]);
	}
}

 

2. vector 오름차순 정렬

#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int n;
vector<int> a(5);
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &a[i]);
	}
	sort(a.begin(), a.end());
	for (int i = 0; i < n; i++) {
		printf("%d\n", a[i]);
	}
}

 

3. pair 배열

 

3-1) first를 기준으로 오름차순 정렬

#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int n;
pair<int, int> a[10];
bool compare(pair<int, int> x, pair<int, int> y) {
	return x.first < y.first;
}
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &a[i].first, &a[i].second);
	}
	sort(a, a+n, compare);
	for (int i = 0; i < n; i++) {
		printf("%d %d\n", a[i].first, a[i].second);
	}
}

 

3-2) second를 기준으로 내림차순 정렬

#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int n;
pair<int, int> a[10];

bool compare(pair<int, int> a, pair<int, int> b){
	return a.second>b.second;
}

int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &a[i].first, &a[i].second);
	}

	sort(a, a+n, compare);

	for (int i = 0; i < n; i++) {
		printf("%d %d\n", a[i].first, a[i].second);
	}
}

 

3-3) second를 기준으로 오름차순 정렬하는데, second가 같으면 first를 기준으로 오름차순 정렬

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

vector<pair<int, int>>v;

bool cmp(pair<int, int>x, pair<int, int>y) {
    if (x.second != y.second) return x.second < y.second;
    else return x.first < y.first;
}

int main() {
    int n;
    cin >> n;
    while (n--) {
        int a, b;
        cin >> a >> b;
        v.push_back({ a,b });
    }
    sort(v.begin(), v.end(), cmp);
    for(auto x: v) {
        cout << x.first << " " << x.second << "\n";
    }
}

 

 

4. 구조체 정렬

 

4-1) m을 기준으로 오름차순 정렬

#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
struct j {
	int m;
	int v;
}a[300005];
bool compare(const j&x, const j&y) {
	return x.m < y.m;
}
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &a[i].m, &a[i].v);
	}
	sort(a, a + n, compare);
}

4-2) v를 기준으로 내림차순 정렬(함수 따로 선언)

#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
struct j {
	int m;
	int v;
}a[300005];
bool compare(const j&x, const j&y) {
	return x.v > y.v;
}
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &a[i].m, &a[i].v);
	}
	sort(a, a + n, compare);
}

4-3) v를 기준으로 내림차순 정렬(함수 바로 선언)

#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
struct j {
	int m;
	int v;
}a[300005];
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &a[i].m, &a[i].v);
	}
	sort(a, a + n, [](j x, j y) { return x.v > y.v; });
	for (int i = 0; i < n; i++) {
		printf("%d %d\n", a[i].m, a[i].v);
	}
}

4-4) v를 기준으로 내림차순 정렬하는데 v가 같으면 m을 기준으로 오름차순

#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
struct j {
	int m;
	int v;
}a[300005];
bool cmp(j a, j b) { //내림차순
	if (a.v != b.v)
		return a.v > b.v;
	else
		return a.m < b.m;
}
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &a[i].m, &a[i].v);
	}
	sort(a, a + n, cmp);
	for (int i = 0; i < n; i++) {
		printf("%d %d\n", a[i].m, a[i].v);
	}
}

 

5. 응용

5-1) 1의 자리를 기준으로 오름차순 정렬

#include <stdio.h>
#include <algorithm>
using namespace std;
int n, a[10];

bool compare(const int&x, const int&y) {
	return x % 10 < y % 10;
}
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &a[i]);
	}
	sort(a, a + n, compare);
	for (int i = 0; i < n; i++) {
		printf("%d\n", a[i]);
	}
}
반응형

'알고리즘 > Algorithm' 카테고리의 다른 글

알고리즘-수학2  (0) 2019.07.06
알고리즘-수학1  (0) 2019.07.06
C언어 1차원, 2차원 배열  (0) 2019.05.09
탐욕 알고리즘(greedy algorithm)  (2) 2019.05.09
C언어 알고리즘-정수, 실수, 문자/문자열 입출력  (0) 2019.05.04
Comments