본문으로 바로가기

C++ STL sort() 사용하기 (기초)

category 프로그래밍/c 문법 2018. 8. 2. 10:39

c++ STL에서 제공하는 


sort()함수에 대해 알아보겠습니다.



C++에서 정렬을 할때 sort 함수를 사용하게 되면 매우 편리한 정렬을 할수 있습니다.


1. sort()함수란?


- algorithm 헤더 파일에 정의되어 있습니다.

- sort( a, b ) 의 형태로 사용하게 되는데 a는 시작주소 b는  a + 데이터들의 개수를 입력하시면 됩니다.

  ( a는 배열의 시작주소, b는 배열의 끝 주소 + 1 을 하시면 됩니다 )

- default로 오름차순 정렬을 합니다.

- Quick Sort(퀵정렬) 기반으로 만들어 졌으며 평균복잡도 nLogn 입니다.


2. 사용방법


예제1)  기본정렬


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int main()
{
    int a[8= { 84325471 };
    sort(a, a + 8);
    for (int i = 0; i < 8; i++)
    {
        cout << a[i] << " ";
    }    
    cout << endl;
}
cs


※출력결과


기본적으로 sort()는 오름차순을 합니다.



예제2)  Compare 메소드를 사용한 정렬


그럼 내림차순으로 정렬하고 싶으면 어떻게 할까요?

sort()함수의 장점이라고 할수있는데요

sort()함수의 3번째 인자에 자신이 원하는 정렬 기준의 함수를 만들어서 넣어주면 거기에 맞게 정렬이 됩니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
 
using namespace std;
 
bool compare(int a, int b)
{
    return a > b;
}
 
int main()
{
    int a[8= { 84325471 };
    sort(a, a + 8,compare);
    for (int i = 0; i < 8; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
}
cs


※출력결과






예제3)  좀더 실무적인 정렬


예제1,2는 기본적인 원리에 대해서 설명했지만 실무에서는 단순히 저렇게 사용하지 않습니다. 

예제3은 좀더 실무적인 코딩을 해보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <algorithm>
#include <string>
 
using namespace std;
 
class Person{
public:
    string name;
    int age;
 
    Person(string name, int age)
    {
        this->name = name;
        this->age = age;
    }
 
    bool operator < (Person &person)
    {
        return this->age > person.age;
    }
};
 
int main()
{
    Person person[] = {
        Person("안녕"10),
        Person("감자"30),
        Person("노란"20),
        Person("파랑"60),
        Person("검정"40)
    };
 
    sort(person, person + 5);
    
    for (int i = 0; i < 5; i++)
    {
        cout << person[i].name << " ";
    }
    cout << endl;
}
cs


※출력결과




출력결과를 보면 내림차순이 되었습니다.

sort에 3번째 인자를 주지도 않았는데 어떻게 내림차순 정렬이 되었을까요?

그 이유는 class를 생성할때 내부에서 연산자 오버로딩을 통해 원하는 정렬 기준을 잡았기 때문입니다.