정렬이 필요할때마다 직접 만들어서 사용할수도 있겠지만 매번 만들어서 사용하기는 번거롭습니다. 간편하게 정렬을 하고 싶다면 직접구현보다는 <algorithm> 헤더를 include하여 그 안에 있는 sort()함수를 사용하시면 간편하게 정렬을 할 수 있습니다.
sort() 함수는 C++ STL에서 제공하는 함수로써 각종 알고리즘 문제를 풀 때도 활용할 수 있어 자주 쓰이는데, 이 함수의 시간 복잡도는 nlogn입니다. 이 함수는 intro sort라는 정렬 방식을 바탕으로 구현되어 있는데 이 방식은 quick sort를 기반으로 heap sort와 insertion sort를 섞은 방식으로 최악의 경우 n^2의 시간 복잡도를 가지는 quick sort와는 달리, 최악의 경우에도 nlogn을 보장하는 정렬 알고리즘입니다.
배열의 오름차순 정렬
#include <iostream>
#include <algorithm>
// sort()함수를 사용하기 위해 <algorithm>을 include 한다.
using namespace std;
int main(void){
//정렬 대상 배열
int arr[10] = {3, 5, 9, 7, 8, 1, 4, 2, 10, 6};
// 정렬
// 첫번째 인자 = 배열의 포인터
// 두번째 인자 = 배열의 포인터 + 배열의 크기
sort(arr, arr+10);
//출력
for(int i=0; i<10; i++){
cout << arr[i] << ' ';
}
return 0;
}
사용법은 <algorithm>헤더를 include한 뒤 sort(begin,end) 이렇게 사용하면 오름차순으로 정렬됩니다. 정렬 방식이 sort(begin,end)이지만 범위가 begin <= arr <end 이기에 종료 index가 아닌 배열의 크기를 넣어주셔야 합니다.
Vector의 오름차순 정렬
#include <iostream>
#include <vector>
#include <algorithm>
// sort()함수를 사용하기 위해 <algorithm>을 include 한다.
using namespace std;
int main(void){
//정렬 대상 vector
vector<int> arr;
//vector push
arr.push_back(3);
arr.push_back(5);
arr.push_back(9);
arr.push_back(7);
arr.push_back(8);
arr.push_back(1);
arr.push_back(4);
arr.push_back(2);
arr.push_back(10);
arr.push_back(6);
// 정렬
// 첫번째 인자 = iterator의 begin()
// 두번째 인자 = iterator의 end()
sort(arr.begin(), arr.end());
//출력
for(int i=0; i<arr.size(); i++){
cout << arr[i] << ' ';
}
return 0;
}
Vecotr의 경우 begin()과 end()함수를 사용하면 편리하게 정렬할 수 있습니다.
내림차순 정렬
#include <iostream>
#include <algorithm>
// sort()함수를 사용하기 위해 <algorithm>을 include 한다.
using namespace std;
//a와 b를 비교하여, a>b의 결과를 반환한다.
bool desc(int a, int b){
return a > b;
}
int main(void){
//정렬 대상 배열
int arr[10] = {9, 3, 5, 7, 8, 1, 2, 4, 6, 10};
// greater 함수를 이용해서 내림차순으로 표현할 수 있다.
sort(arr, arr+10, desc);
for(int i=0; i<10; i++){
cout << arr[i] << ' ';
}
return 0;
}
내림차순으로 정렬을 하고 싶다면 먼저 내림차순으로 해주는 함수를 정의하고 sort() 함수의 마지막 인자값으로 넣어주면 됩니다.
'Language > C , C++ , C#' 카테고리의 다른 글
[C++] STL stack 사용법 & 예제 총정리 (1) | 2020.09.03 |
---|---|
[C++] STL vector 사용법 & 예제 총정리 (8) | 2020.09.02 |
[C언어/C++] 문자열 비교 strcmp, strncmp 함수 사용법 & 예제 + 구현 (0) | 2020.08.31 |
[C언어,C++] 문자열 합치기 strcat, strncat 함수 사용법 & 예제 +구현 (0) | 2020.08.30 |