INFO
C++ STL 라이브러리의 algorithm 헤더는 sort 정렬 함수를 제공합니다.
sort 정렬 함수는 intro sort 정렬 알고리즘을 이용하는데 이는 quick sort 정렬 알고리즘을 기반으로 한 heap sort 와 insertion sort 를 혼합해 만든 알고리즘으로 최악의 경우에 n^2의 시간 복잡도를 가지는 quick sort의 단점을 보완하여 최악의 경우에도 nlogn의 시간 복잡도를 가지는 정렬 알고리즘 입니다.
PS에서 빈번하게 사용되는 함수이기에, 한 번 숙지해 두면 알고리즘 풀이에 큰 도움이 될 것 입니다.
#1 오름차순 정렬
- 1.1 벡터 오름차순 정렬 예제
- 1.2 배열 오름차순 정렬 예제
#2 내림차순 정렬
- 2.1 벡터 내림차순 정렬 예제
- 2.2 배열 내림차순 정렬 예제
#1 오름차순 정렬
- 1.1 벡터 오름차순 정렬 예제
sort 함수를 사용하기 위해선 <algorithm> 헤더를 선언해야 합니다. sort 함수를 벡터에서 사용하는 경우에는, sort(v.begin(),v.end()); 와 같이 begin(), end() 멤버함수를 이용합니다.
#include <iostream>
#include <algorithm> // sort()
#include <vector> // vector
using namespace std;
int main()
{
vector<int> v;
v.push_back(10);
v.push_back(30);
v.push_back(20);
v.push_back(40);
v.push_back(50);
cout << "[Before Sort] ";
for (int i = 0 ; i < v.size() ; i++)
{
cout << v[i] << " ";
}
sort(v.begin(),v.end()); // 오름차 정렬
cout << endl;
cout << "[After Sort] ";
for (int i = 0 ; i < v.size() ; i++)
{
cout << v[i] << " ";
}
return 0;
}
[Before Sort] 10 30 20 40 50
[After Sort] 10 20 30 40 50
- 1.2 배열 오름차순 정렬 예제
sort 함수를 배열에서 이용하는 경우에는, 첫 번째 인자에 배열의 포인터를 넣고 , 두 번째 인자에는 배열의 포인터 + 배열의 크기 값을 넣습니다. 따라서 다음과 같은 형태로 사용하면 됩니다. sort(arr,arr+n);
#include <iostream>
#include <algorithm> // sort()
using namespace std;
int main()
{
int arr[5] = {10, 30, 20, 40, 50};
cout << "[Before Sort] ";
for (int i = 0 ; i < 5 ; i++)
{
cout << arr[i] << " ";
}
cout << endl;
sort(arr,arr+5); // sort 오름차순 정렬
cout << "[After Sort] ";
for (int i = 0 ; i < 5 ; i++)
{
cout << arr[i] << " ";
}
return 0;
}
[Before Sort] 10 30 20 40 50
[After Sort] 10 20 30 40 50
#2 내림차순 정렬
sort 함수를 이용해 벡터 혹은 배열의 원소를 내림차 정렬을 수행하기 위해서는, 세 번째 인자에 사용자 정의 함수를 넣어 주어야 합니다. 사용자 함수 (compare)의 형태는 다음과 같습니다.
bool compare (int x, int y)
{
return x > y;
}
나머지 코드는 오름차순 정렬과 동일하기에, 소스코드만 올려두고 따로 설명은 생략하도록 하겠습니다.
- 2.1 벡터 내림차순 정렬 예제
#include <iostream>
#include <algorithm> // sort()
#include <vector> // vector
using namespace std;
bool compare (int x, int y)
{
return x > y;
}
int main()
{
vector<int> v;
v.push_back(10);
v.push_back(30);
v.push_back(20);
v.push_back(40);
v.push_back(50);
cout << "[Before Sort] ";
for (int i = 0 ; i < v.size() ; i++)
{
cout << v[i] << " ";
}
sort(v.begin(), v.end(), compare); // 내림차순 정렬
cout << endl;
cout << "[After Sort] ";
for (int i = 0 ; i < v.size() ; i++)
{
cout << v[i] << " ";
}
return 0;
}
- 2.2 배열 내림차순 정렬 예제
#include <iostream>
#include <algorithm> // sort()
using namespace std;
bool compare (int x, int y)
{
return x > y;
}
int main()
{
int arr[5] = {10, 30, 20, 40, 50};
cout << "[Before Sort] ";
for (int i = 0 ; i < 5 ; i++)
{
cout << arr[i] << " ";
}
cout << endl;
sort(arr, arr+5, compare); // sort 내림차순 정렬
cout << "[After Sort] ";
for (int i = 0 ; i < 5 ; i++)
{
cout << arr[i] << " ";
}
return 0;
}
'Archive2 > C&C++' 카테고리의 다른 글
[C++STL] max_element , min_element - 배열/벡터에서 최대,최소 찾기 (0) | 2021.07.06 |
---|---|
[C++ STL] Deque Container 사용 방법 & 관련 예제 총 정리 (0) | 2021.05.10 |
[C++ STL] Queue Container 사용법 정리 (0) | 2021.05.06 |
[C/C++] Queue(큐) 자료구조 정리 (1) | 2021.05.06 |
[C++ STL] Pair Container 사용법 정리 (With Vector, Typedef, Sort) (0) | 2021.05.03 |