[C++] sort() 함수

Doorbals·2023년 1월 7일
0

CPP

목록 보기
9/16

sort() 함수

  • <algorithm> 헤더 파일에 선언되어있다.
  • 일련의 자료구조(Array, vector 등)에서 원소를 원하는 기준으로 정렬해주는 함수
  • intro sort 라는 알고리즘으로 구현되어 있는데, 이는 quick sort, heap sort, insertio sort를 섞어 quick sort의 단점을 보완하여 어떤 상황에서도 O(nlogn)의 시간 복잡도를 가질 수 있다.

아래 예시들에서는 vector 자료구조를 정렬해보고자 한다.


1) 오름차순 정렬

#include <algorithm>
vector<자료형> v;
sort(v.begin(), v.end());
  • 기본적으로 범위만 지정해 줄 때는 자동으로 오름차순으로 정렬이 된다.
  • v.begin(), v.end()와 같이 iterator를 통해 범위를 지정해준다

🖥️ 예제 코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    vector<int> v = { 5, 2, 3, 1, 7, 0, 4, 6 };

    sort(v.begin(), v.end());

    for (int i = 0; i < v.size(); i++)
        cout << v[i] << " ";
}

✔️ 출력 결과


2) 내림차순 정렬

#include <algorithm>
vector<자료형> v;
sort(v.begin(), v.end(), greater<자료형>());
  • 라이브러리 함수로 이미 구현되어 있는greater<자료형>() 함수를 마지막 인수로 추가해준다.

🖥️ 예제 코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    vector<int> v = { 5, 2, 3, 1, 7, 0, 4, 6 };

    sort(v.begin(), v.end(), greater<int>());

    for (int i = 0; i < v.size(); i++)
        cout << v[i] << " ";
}

✔️ 출력 결과


3) 사용자 설정 함수로 정렬

bool Compare(자료형 a, 자료형 b)
{
	return 조건문
}

#include <algorithm>
vector<int> v;
sort(v.begin(), v.end(), Compare);
  • 사용자가 원하는 기준으로 정렬하기 위한 bool형 함수(Compare)를 만든다.
  • 해당 함수를 마지막 인수로 추가해준다.

🖥️ 예제 코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

bool Compare(pair<int, string> a, pair<int, string> b)
{
    int a_int = a.first;
    int b_int = b.first;

    return a.first < b.first;
}

int main()
{
    vector<pair<int, string>> v;
    v.push_back(pair<int, string>(2, "C"));
    v.push_back(pair<int, string>(0, "A"));
    v.push_back(pair<int, string>(1, "B"));

    sort(v.begin(), v.end(), Compare);

    for (int i = 0; i < v.size(); i++)
        cout << v[i].second << endl;
}
  • v는 pair<int, string> 형의 데이터들을 저장하는 vector
  • Compare() 함수는 각 pair 데이터들의 first 값인 정수들(int)의 오름차순으로 정렬한다.
  • vector 내의 pair 데이터들은 (0, "A"), (1, "B"), (2, "C") 이렇게 짝지어져 있으므로 A B C 순서로 출력된다.

✔️ 출력 결과

❗배열에서 사용 방법

int arr[100];
sort(arr, arr + 100)
sort(arr, arr + 100, Compare)
profile
게임 클라이언트 개발자 지망생의 TIL

0개의 댓글