관리 메뉴

JIE0025

[ C++ ] sort , stable_sort 본문

기타 학습/Language

[ C++ ] sort , stable_sort

Kangjieun11 2022. 5. 20. 22:36
728x90

 

sort()함수

#include <algorithm> 헤더 포함

- default 는 오름차순이다. 

- 정렬 조건을 주고 싶을때 함수를 만들어 함수이름 자리에 넣어주면 된다.  (필수 X )  

sort(시작주소, 끝주소+1, 함수이름 )

 

 

1) 기본 배열의 sort

배열의 이름은 배열의 시작 주소값이므로 arr과

arr+ (요소의 개수) 를 단순하게 인자값으로 넣어주면 된다.

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

int main() {

	int arr[5] = {3,7,1,9,5};
	sort(arr, arr + 5);

	for (int i = 0; i < 5; i++) {
		cout << arr[i] << " ";
	}
	return 0;
}

 

 

 

2) 벡터의 sort

vector는 동적할당되는 자료구조이므로

v.begin()과 v.end()를 사용하면 편리하다.

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int main() {

	vector <int> v = { 1,5,5,3,6,31,3 };
	sort(v.begin(), v.end());
	
	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << " ";
	}

	return 0;
}

 

 

3) sort 내림차순

 

3-1 함수 자리에 greater<> 임시객체 호출

#include <functional>

greater<>() 

 

#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>

using namespace std;

int main() {

	vector <int> v = { 1,5,5,3,6,31,3 };
	sort(v.begin(), v.end(),greater<>());
	
	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << " ";
	}

	return 0;
}

 

3-2 함수제작

 

아래는 compare이라는 함수를 만들어서 sort에서 호출하는 방식이다. 

 

return i > j 라고 되어 있는데 오른쪽에 있는 값(j)이 왼쪽에 있는 값(i)보다 작게 정렬하라는 뜻 

즉 오른쪽으로 갈수록 작은 값이 나오게 한다는 뜻이다. (내림차순)

 

return i < j 를 할 경우엔 오른쪽으로 갈수록 큰 값이 나오겠지? (오름차순) 

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

bool compare(int i, int j) {
	return i > j;
}
int main() {

	int arr[5] = {3,7,1,9,5};
	sort(arr, arr + 5, compare);

	for (int i = 0; i < 5; i++) {
		cout << arr[i] << " ";
	}
	cout << endl;


	vector <int> v = { 1,5,5,3,6,31,3 };
	sort(v.begin(), v.end(), compare);
	
	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << " ";
	}

	return 0;
}

 

 

4)  stable_sort()

다중 정렬시 많이 사용하는 친구는이다.

 

- 여러 값들이 묶여 있을 때하나의 요소로 정렬을 했을 떄 다른 요소의 정렬 순서도 정렬 전과 같이 유지 하는 정렬

 

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

bool compare2(pair<int, string> a, pair<int, string>b) {
	return a.first > b.first;
}
int main() {

	int num = 4;
	pair<int, string> p;
	vector<pair<int, string>> v;
	for (int i = 0; i < num; i++) {
		cin >> p.first >> p.second;
		v.push_back(p);
	}

	stable_sort(v.begin(), v.end(), compare2);

	for (int i = 0; i < 4; i++) {
		cout << v[i].first << " " << v[i].second << endl;
	}
	return 0;
}

입력

 

정렬 결과

 

 

'기타 학습 > Language' 카테고리의 다른 글

[Python] 얕은 복사, 깊은 복사  (0) 2022.05.28
[ C++ ] 상속  (0) 2022.05.20
[ C++ ] 삼각형의 성립 조건  (0) 2022.05.20
[ C++ ] 충돌 알고리즘  (0) 2022.05.20
[ C++ ] 문자열을 숫자로 (stoi, stof, stol, stod)  (0) 2022.05.19