반응형

알고리즘 문제 풀 때 배열이나 벡터를 내림차순으로 정렬해야 하는데 매번 까먹어서 검색을 해왔는데, 블로그로 정리해두면 기억에 오래 남을 것 같아서 포스팅하게 되었습니다. 

 

sort 함수를 사용하기위해서는 <algorithm> 헤더파일을 include 해야 하며 sort(begin, end)를 이용하여 [begin, end) 범위의 원소들을 오름차순으로 정렬할 수 있습니다. 예를 들어 아래와 같은 코드가 있다면

sort(arr, arr+3) // 오름차순 정렬

 arr[0], arr[1], arr[2]를 오름차순으로 정렬하게 됩니다.

 

만약 내림차순으로 정렬하고 싶다면?

sort(arr, arr+3, greater<>()); // 내림차순 정렬

위와 같이 sort함수의 3번째 파라미터로 greater<>()을 붙여주면 내림차순으로 정렬하게 됩니다.

sort함수는 quick sort(퀵 정렬)를 기반으로 구현되어 있기 때문에 시간복잡도는 n log n입니다.

 

<사용방법 요약>

  • sort(arr, arr+N);
  • sort(v.begin(), v.end());
  • sort(v.begin(), v.end(), compare);                //사용자 정의 함수 사용
  • sort(v.begin(), v.end(), greater<자료형>());    //내림차순
  • sort(v.begin(), v.end(), less<자료형>());        //오름차순 (default 값)

 

 

sort의 default값이 오름차순이기 때문에 less<자료형>() 은 잘 안쓰이게 됩니다.

 

 

 

<배열의 오름차순, 내림차순 정렬>

#include <iostream> 
#include <algorithm>
using namespace std;

int arr[10] = {2,6,5,8,3,7,9,1,4,10};

int main(void) 
{
    cout << "원래배열 : ";
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i] << " ";
    }


    cout << endl;
    

    sort(arr, arr + 10);
    cout << "오름차순 : ";
    for (int i = 0; i < 10; i++) 
    {
        cout << arr[i] << " ";
    }


    cout << endl;


    sort(arr, arr + 10, greater<>());
    cout << "내림차순 : ";
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i] << " ";
    }


    return 0;
}

 

<Vector의 오름차순, 내림차순 정렬>

#include <iostream> 
#include <vector>
#include <algorithm>
using namespace std;

int arr[10] = { 2,6,5,8,3,7,9,1,4,10 };
vector<int> v;

int main(void) 
{
    for (int i = 0; i < 10; i++) 
    {
        v.push_back(arr[i]);
    }
    
    cout << "원래배열 : ";
    for (int i = 0; i < (int)v.size(); i++)
    {
        cout << v[i] << " ";
    }


    cout << endl;


    sort(v.begin(), v.end());
    cout << "오름차순 : ";
    for (int i = 0; i < (int)v.size(); i++)
    {
        cout << v[i] << " ";
    }


    cout << endl;


    sort(v.begin(), v.end(), greater<>());
    cout << "내림차순 : ";
    for (int i = 0; i < (int)v.size(); i++)
    {
        cout << v[i] << " ";
    }
}

 

<사용자 지정함수를 통한 배열 오름차순, 내림차순 정렬>

#include <iostream> 
#include <algorithm>
using namespace std;

int arr[10] = { 2,6,5,8,3,7,9,1,4,10 };

bool compare(int a, int b) 
{
    return a > b;
}

int main(void)
{
    cout << "원래배열 : ";
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i] << " ";
    }


    cout << endl;


    sort(arr, arr + 10);
    cout << "오름차순 : ";
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i] << " ";
    }


    cout << endl;


    sort(arr, arr + 10, compare);
    cout << "내림차순 : ";
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i] << " ";
    }


    return 0;
}

- 사용자 지정함수

bool compare(int a, int b) 
{
    return a > b;
}

 

반응형

+ Recent posts