[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