정수(int), 실수(float), 문자열(string), 불리언(bool)처럼 서로 다른 데이터 유형의 값들이 주어졌을 때, 단 하나의 공통 함수만으로 어떤 자료형의 변수든 정렬하고 그 결과를 화면에 출력하는 것이 이 글의 핵심 목표입니다.
C++ std::sort 함수의 기본 개념
C++에서는 표준 템플릿 라이브러리(STL)에 포함된 std::sort 함수를 사용하면 어떤 자료형의 배열이든 간편하게 정렬할 수 있습니다. 버블 정렬이나 퀵 정렬 같은 알고리즘을 직접 구현할 필요 없이, 헤더 파일만 포함하면 되기 때문에 코드가 훨씬 간결해집니다.
기본적으로 sort() 함수는 배열 요소를 오름차순으로 정렬하며, 세 가지 인자를 받습니다.
- 첫 번째 인자 – 시작 요소: 정렬을 시작할 배열의 첫 번째 요소(주소 또는 반복자)
- 두 번째 인자 – 끝 요소: 정렬이 끝나는 지점으로, 마지막 요소의 '다음' 위치를 가리킵니다.
- 세 번째 인자 – 비교 기준(선택 사항): 기본 동작을 변경하고 싶을 때 사용합니다. 예를 들어
greater<T>()를 전달하면 내림차순으로 정렬됩니다.
예시 입출력
입력 -: int arr[] = { 2, 1, 5, 4, 6, 3 }
출력 -: 1, 2, 3, 4, 5, 6
입력 -: float arr[] = { 30.0, 21.1, 29.0, 45.0 }
출력 -: 21.1, 29.0, 30.0, 45.0
입력 -: string str[] = { "tutorials point is best", "tutorials point", "www.tutorialspoint.com" }
출력 -: tutorials point → tutorials point is best → www.tutorialspoint.com
문자열의 경우 사전 순(lexicographic order)으로 비교되어 정렬된다는 점도 눈여겨볼 만합니다.
프로그램의 접근 방식
- 정수, 실수, 문자열 등 다양한 데이터 유형의 배열을 준비합니다.
- 어떤 자료형이든 처리할 수 있도록 템플릿(template) 기반의 출력 함수를 작성합니다.
- 각 배열에 sort() 함수를 적용해 정렬한 뒤 결과를 출력합니다.
알고리즘
시작
Step 1 -> 서로 다른 자료형을 처리하기 위해 템플릿 함수 선언: template <class T>
Step 2 -> 정렬된 배열을 출력하는 함수 작성
void print(T arr[], int size)
반복문: i = 0부터 i < size까지 ++i
arr[i] 출력
반복문 종료
Step 3 -> main() 함수 내부
정수형 배열 생성 후 크기 계산
sort(arr, arr + n) 호출 → print(arr, n) 호출
문자열 배열 생성 후 크기 계산
sort(str, str + n) 호출 → print(str, n) 호출
실수형 배열 생성 후 크기 계산
sort(float_arr, float_arr + n) 호출 → print(float_arr, n) 호출
종료
예제 코드
#include <bits/stdc++.h>
using namespace std;
// 템플릿을 활용해 어떤 자료형이든 출력할 수 있는 함수
template <class T>
void print(T arr[], int size) {
for (int i = 0; i < size; ++i)
cout << arr[i] << " ";
cout << endl;
}
int main() {
// 정수형 배열 정렬
int arr[] = { 10, 90, 1, 2, 3 };
int n1 = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + n1);
print(arr, n1);
// 문자열 배열 정렬
string str[] = { "tutorials point is best", "tutorials point", "www.tutorialspoint.com" };
int n2 = sizeof(str) / sizeof(str[0]);
sort(str, str + n2);
print(str, n2);
// 실수형 배열 정렬
float float_arr[] = { 32.0f, 12.76f, 10.00f };
int n3 = sizeof(float_arr) / sizeof(float_arr[0]);
sort(float_arr, float_arr + n3);
print(float_arr, n3);
return 0;
}
실행 결과
1 2 3 10 90 tutorials point tutorials point is best www.tutorialspoint.com 10 12.76 32
위 코드에서는 sizeof(arr) / sizeof(arr[0])를 사용해 배열의 실제 크기를 자동으로 계산했습니다. 이렇게 하면 배열 크기와 초기화 요소 개수가 일치하지 않아 발생할 수 있는 오류나 의도치 않은 0 값 출력을 방지할 수 있습니다.
응용: 내림차순으로 정렬하기
세 번째 인자에 greater<T>()를 전달하면 같은 코드로 내림차순 정렬도 손쉽게 구현할 수 있습니다.
sort(arr, arr + n1, greater<int>()); // 결과: 90 10 3 2 1
이처럼 std::sort와 템플릿 함수를 조합하면 자료형에 상관없이 하나의 정렬 로직을 재사용할 수 있어, 코드의 가독성과 유지보수성이 크게 향상됩니다.