[C++ STL] sort 정렬 함수 사용 방법 정리 (오름차순 & 내림차순)

반응형
반응형

INFO

C++ STL 라이브러리의 algorithm 헤더는 sort 정렬 함수를 제공합니다.

sort 정렬 함수는 intro sort 정렬 알고리즘을 이용하는데 이는 quick sort 정렬 알고리즘을 기반으로 한 heap sort 와 insertion sort 를 혼합해 만든 알고리즘으로 최악의 경우에 n^2의 시간 복잡도를 가지는 quick sort의 단점을 보완하여 최악의 경우에도 nlogn의 시간 복잡도를 가지는 정렬 알고리즘 입니다.

PS에서 빈번하게 사용되는 함수이기에, 한 번 숙지해 두면 알고리즘 풀이에 큰 도움이 될 것 입니다.

 

#1 오름차순 정렬

- 1.1 벡터 오름차순 정렬 예제

- 1.2 배열 오름차순 정렬 예제

#2 내림차순 정렬

- 2.1 벡터 내림차순 정렬 예제

- 2.2 배열 내림차순 정렬 예제


#1 오름차순 정렬

- 1.1 벡터 오름차순 정렬 예제

sort 함수를 사용하기 위해선 <algorithm> 헤더를 선언해야 합니다. sort 함수를 벡터에서 사용하는 경우에는, sort(v.begin(),v.end()); 와 같이 begin(), end() 멤버함수를 이용합니다.

#include <iostream>
#include <algorithm> // sort()
#include <vector> // vector
using namespace std;

int main()
{
	vector<int> v;
	v.push_back(10);
	v.push_back(30);
	v.push_back(20);
	v.push_back(40);
	v.push_back(50);
	
	cout << "[Before Sort] ";
	for (int i = 0 ; i < v.size() ; i++)
	{
		cout << v[i] << " ";
	}
	
	sort(v.begin(),v.end()); // 오름차 정렬 
	
	cout << endl;
	cout << "[After Sort] ";
	for (int i = 0 ; i < v.size() ; i++)
	{
		cout << v[i] << " ";
	}
	
	return 0;
}
[Before Sort] 10 30 20 40 50
[After Sort] 10 20 30 40 50

 

- 1.2 배열 오름차순 정렬 예제

sort 함수를 배열에서 이용하는 경우에는, 첫 번째 인자에 배열의 포인터를 넣고 , 두 번째 인자에는 배열의 포인터 + 배열의 크기 값을 넣습니다. 따라서 다음과 같은 형태로 사용하면 됩니다. sort(arr,arr+n);

#include <iostream>
#include <algorithm> // sort()
using namespace std;

int main()
{
	int arr[5] = {10, 30, 20, 40, 50}; 
	cout << "[Before Sort] ";
	for (int i = 0 ; i < 5 ; i++)
	{ 
		cout << arr[i] << " ";
	}
	cout << endl;
	
	sort(arr,arr+5); // sort 오름차순 정렬 
	cout << "[After Sort] ";
	for (int i = 0 ; i < 5 ; i++)
	{
		cout << arr[i] << " ";
	}
	
	return 0;
}
[Before Sort] 10 30 20 40 50
[After Sort] 10 20 30 40 50

 

#2 내림차순 정렬

sort 함수를 이용해 벡터 혹은 배열의 원소를 내림차 정렬을 수행하기 위해서는, 세 번째 인자에 사용자 정의 함수를 넣어 주어야 합니다. 사용자 함수 (compare)의 형태는 다음과 같습니다. 

bool compare (int x, int y)
{
	return x > y;
}

나머지 코드는 오름차순 정렬과 동일하기에, 소스코드만 올려두고 따로 설명은 생략하도록 하겠습니다.

 

- 2.1 벡터 내림차순 정렬 예제

#include <iostream>
#include <algorithm> // sort()
#include <vector> // vector
using namespace std;

bool compare (int x, int y)
{
	return x > y;
}

int main()
{
	vector<int> v;
	v.push_back(10);
	v.push_back(30);
	v.push_back(20);
	v.push_back(40);
	v.push_back(50);
	
	cout << "[Before Sort] ";
	for (int i = 0 ; i < v.size() ; i++)
	{
		cout << v[i] << " ";
	}
	
	sort(v.begin(), v.end(), compare); // 내림차순 정렬 
	
	cout << endl;
	cout << "[After Sort] ";
	for (int i = 0 ; i < v.size() ; i++)
	{
		cout << v[i] << " ";
	}
	
	return 0;
}

 

- 2.2 배열 내림차순 정렬 예제

#include <iostream>
#include <algorithm> // sort()
using namespace std;

bool compare (int x, int y)
{
	return x > y;
}

int main()
{
	int arr[5] = {10, 30, 20, 40, 50}; 
	cout << "[Before Sort] ";
	for (int i = 0 ; i < 5 ; i++)
	{ 
		cout << arr[i] << " ";
	}
	cout << endl;
	
	sort(arr, arr+5, compare); // sort 내림차순 정렬 
	cout << "[After Sort] ";
	for (int i = 0 ; i < 5 ; i++)
	{
		cout << arr[i] << " ";
	}
	
	return 0;
}

 

반응형

댓글

Designed by JB FACTORY