본문 바로가기

C++

[C++] sort 함수로 정수, 문자열 오름차순 내림차순 정렬하기

sort 함수란?

sort 함수는 C++ 'algorithm' 헤더 파일에 있는 함수입니다. sort 함수는 정렬 기능을 가진 함수입니다. qsort라는 함수도 정렬 기능을 하지만 sort함수가 더 빠릅니다. 표준 라이브러리에 있는 만큼 강력하기 때문에 사용하는 게 좋다고 합니다.

 

함수의 원형입니다.

//default
template <class RandomAccessIterator> 
void sort (RandomAccessIterator first, RandomAccessIterator last);

//custom
template <class RandomAccessIterator, class Compare> 
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

쉽게 표현하면 다음과 같습니다.

void sort(첫번째주소, 마지막주소, 정렬형태)

 

정렬형태 매개변수는 있어도 되고 없어도 됩니다. 없으면 오름차순이 default입니다.

 

sort함수는 std 소속입니다. 무턱대고 쓰면 [Note] 'std::sort' 에러 메시지를 볼 수 있습니다. 네임스페이스를 선언하여 편하게 사용할 수 있도록 합니다.

#include <stdio.h>
#include <algorithm>

using namespace std;

int main(){
	//무작위 배열
	int arr[10] = {5, 6, 10, 4, 3, 8, 7, 1, 2, 9};
	
	//arr[0] ~ arr[9]
	sort(arr, arr+10);
	
	//출력 
	for(int i=0;i<10;++i){
		printf("%d ", arr[i]);
	}
	
	return 0;
}

 

결과값:

1 2 3 4 5 6 7 8 9 10

 

정렬 형태를 입력하지 않아 오름차순으로 정렬된 것을 확인할 수 있습니다.

 

 

이번엔 문자열을 내림차순으로 정렬해보겠습니다.

#include <stdio.h>
#include <algorithm>
#include <string>
#include <iostream>

using namespace std;

bool comp(string s1, string s2){
	return s1 > s2;	//string 사전 역순 
}
int main(){
	//문자열 배열
	string sArr[5] = {"abc", "aa", "abcd", "aza", "bcda"};
	
	//sArr[0] ~ sArr[4], 사전 역순으로 정렬
	sort(sArr, sArr+5, comp);
	
	//출력 
	for(int i=0;i<5;++i){
		cout << sArr[i] << endl;
	}
	
	return 0;
}

 

결과값:

bcda
aza
abcd
abc
aa

 

어떤 식으로 정렬할 것인지 함수를 통해 정해줬습니다. 내림차순으로(사전 역순으로) 정렬하기 위해 comp함수를 만들었고 비교하기 위한 두 string을 매개변수로 받았습니다. string의 경우 비교 연산자가 적용되는 것도 알 수 있습니다.