C++ STL로 배열 정렬하기
C++에서는 <algorithm> 헤더 파일에 포함된 sort() 함수를 사용하면 별도의 정렬 알고리즘을 직접 구현하지 않고도 배열을 손쉽게 정렬할 수 있습니다.
예를 들어 A = [52, 14, 85, 63, 99, 54, 21]과 같은 배열이 있을 때, sort() 함수를 적용하면 [14, 21, 52, 54, 63, 85, 99]처럼 오름차순으로 정렬된 결과를 얻을 수 있습니다.
sort() 함수의 기본 문법
sort(시작_주소, 끝_주소);
첫 번째 인자는 정렬을 시작할 위치(배열의 시작 주소), 두 번째 인자는 정렬을 마칠 위치(마지막 요소의 다음 주소)입니다.
예제 코드
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int arr[] = {52, 14, 85, 63, 99, 54, 21};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "정렬 전 배열: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
sort(arr, arr + n);
cout << "\n정렬 후 배열: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}실행 결과
정렬 전 배열: 52 14 85 63 99 54 21 정렬 후 배열: 14 21 52 54 63 85 99
sort() 함수의 동작 원리와 성능
sort() 함수는 내부적으로 인트로소트(Introsort) 알고리즘을 사용합니다. 이는 퀵 정렬, 힙 정렬, 삽입 정렬을 상황에 따라 조합한 하이브리드 방식으로, 평균 및 최악의 경우 모두 O(n log n)의 시간 복잡도를 보장하므로 매우 안정적이고 빠른 성능을 제공합니다.
내림차순으로 정렬하는 방법
기본적으로 sort()는 오름차순으로 정렬하지만, 세 번째 인자로 비교 기준을 전달하면 정렬 순서를 바꿀 수 있습니다. <functional> 헤더의 greater<int>()를 사용하면 내림차순 정렬이 가능합니다.
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
int main() {
int arr[] = {52, 14, 85, 63, 99, 54, 21};
int n = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + n, greater<int>());
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
// 출력 결과: 99 85 63 54 52 21 14
}마무리
STL의 sort() 함수를 활용하면 퀵 정렬이나 병합 정렬 같은 알고리즘을 일일이 구현할 필요 없이 단 한 줄의 코드로 배열을 정렬할 수 있습니다. vector 등 다른 STL 컨테이너에도 동일하게 적용할 수 있어, C++ 프로그래밍에서 가장 널리 쓰이는 필수 함수 중 하나입니다.