반응형
알고리즘 문제 풀 때 배열이나 벡터를 내림차순으로 정렬해야 하는데 매번 까먹어서 검색을 해왔는데, 블로그로 정리해두면 기억에 오래 남을 것 같아서 포스팅하게 되었습니다.
sort 함수를 사용하기위해서는 <algorithm> 헤더파일을 include 해야 하며 sort(begin, end)를 이용하여 [begin, end) 범위의 원소들을 오름차순으로 정렬할 수 있습니다. 예를 들어 아래와 같은 코드가 있다면
sort(arr, arr+3) // 오름차순 정렬
arr[0], arr[1], arr[2]를 오름차순으로 정렬하게 됩니다.
만약 내림차순으로 정렬하고 싶다면?
sort(arr, arr+3, greater<>()); // 내림차순 정렬
위와 같이 sort함수의 3번째 파라미터로 greater<>()을 붙여주면 내림차순으로 정렬하게 됩니다.
sort함수는 quick sort(퀵 정렬)를 기반으로 구현되어 있기 때문에 시간복잡도는 n log n입니다.
<사용방법 요약>
- sort(arr, arr+N);
- sort(v.begin(), v.end());
- sort(v.begin(), v.end(), compare); //사용자 정의 함수 사용
- sort(v.begin(), v.end(), greater<자료형>()); //내림차순
- sort(v.begin(), v.end(), less<자료형>()); //오름차순 (default 값)
sort의 default값이 오름차순이기 때문에 less<자료형>() 은 잘 안쓰이게 됩니다.
<배열의 오름차순, 내림차순 정렬>
#include <iostream>
#include <algorithm>
using namespace std;
int arr[10] = {2,6,5,8,3,7,9,1,4,10};
int main(void)
{
cout << "원래배열 : ";
for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}
cout << endl;
sort(arr, arr + 10);
cout << "오름차순 : ";
for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}
cout << endl;
sort(arr, arr + 10, greater<>());
cout << "내림차순 : ";
for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}
return 0;
}
<Vector의 오름차순, 내림차순 정렬>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int arr[10] = { 2,6,5,8,3,7,9,1,4,10 };
vector<int> v;
int main(void)
{
for (int i = 0; i < 10; i++)
{
v.push_back(arr[i]);
}
cout << "원래배열 : ";
for (int i = 0; i < (int)v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
sort(v.begin(), v.end());
cout << "오름차순 : ";
for (int i = 0; i < (int)v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
sort(v.begin(), v.end(), greater<>());
cout << "내림차순 : ";
for (int i = 0; i < (int)v.size(); i++)
{
cout << v[i] << " ";
}
}
<사용자 지정함수를 통한 배열 오름차순, 내림차순 정렬>
#include <iostream>
#include <algorithm>
using namespace std;
int arr[10] = { 2,6,5,8,3,7,9,1,4,10 };
bool compare(int a, int b)
{
return a > b;
}
int main(void)
{
cout << "원래배열 : ";
for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}
cout << endl;
sort(arr, arr + 10);
cout << "오름차순 : ";
for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}
cout << endl;
sort(arr, arr + 10, compare);
cout << "내림차순 : ";
for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}
return 0;
}
- 사용자 지정함수
bool compare(int a, int b)
{
return a > b;
}
반응형
'🟦C++' 카테고리의 다른 글
[C++] STL Queue 큐 사용법과 예제코드 (0) | 2020.12.07 |
---|---|
[C/C++] 2차원 배열 정렬하는 방법 (vector) (1) | 2020.11.28 |
[C/C++] 클래스와 객체 (2) | 2020.08.12 |
[C/C++] endl 와 \n의 속도차이 (0) | 2020.06.06 |
[C/C++] 배열 & 포인터 예제 (0) | 2020.05.15 |