프로그래밍 언어/C, C++

[C++] STL sort 정렬 사용하기(오름차순/내림차순)

sujo 2020. 10. 7. 02:13

사용 헤더

#include <algorithm>

 

배열에 sort 사용하기

오름차순(default)

sort(arr, arr+n)

이때 n은 배열 원소의 갯수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <algorithm>
#include <iostream>
using namespace std;
 
void printArr(int *arr) {
    cout << "[ ";
    for (int i = 0; i < 5; i++)
        cout << arr[i] << " ";
    cout << "]\n\n";
}
 
int main() {
    int arr[] = { 4,5,2,3,1 };
    cout << "정렬 전\n";
    printArr(arr);
 
    sort(arr, arr + 5);
    cout << "정렬 후\n";
    printArr(arr);
 
    return 0;
}
cs

 

 

 

내림차순

배열에서 내림차순을 하기 위해서는 아래와 같이 새로 함수를 만들어 sort에 넣어주면 된다.

1
2
3
bool desc(int a, int b) {
    return a > b;
}
cs

 

sort(arr, arr + 5, desc);

이때, desc는 임의의 함수명이다.

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
#include <algorithm>
#include <iostream>
using namespace std;
 
void printArr(int *arr) {
    cout << "[ ";
    for (int i = 0; i < 5; i++)
        cout << arr[i] << " ";
    cout << "]\n\n";
}
 
bool desc(int a, int b) {
    return a > b;
}
 
int main() {
    int arr[] = { 4,5,2,3,1 };
    cout << "정렬 전\n";
    printArr(arr);
 
    sort(arr, arr + 5, desc);
    cout << "정렬 후\n";
    printArr(arr);
 
    return 0;
}
cs

 

 

 

벡터에 sort 사용하기

오름차순(default)

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

벡터의 시작과 끝을 인수로 넣어주면 된다.

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
#include <algorithm>
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
 
void printVec(vector<int> &v) {
    cout << "[ ";
    for (int i = 0; i < 5; i++)
        cout << v[i] << " ";
    cout << "]\n\n";
}
 
int main() {
    srand((unsigned int)time(NULL));
 
    vector<int> v;
    for (int i = 0; i < 5; i++)
        v.push_back(rand() % 10);
 
    cout << "정렬 전\n";
    printVec(v);
 
    sort(v.begin(), v.end());
    cout << "정렬 후\n";
    printVec(v);
 
    return 0;
}
cs

 

 

 

내림차순

sort(v.begin(), v.end(), greater<자료형(type)>());

내림차순을 할때는 greater를 넣어준다.

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
#include <algorithm>
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
 
void printVec(vector<int> &v) {
    cout << "[ ";
    for (int i = 0; i < 5; i++)
        cout << v[i] << " ";
    cout << "]\n\n";
}
 
int main() {
    srand((unsigned int)time(NULL));
 
    vector<int> v;
    for (int i = 0; i < 5; i++)
        v.push_back(rand() % 10);
 
    cout << "정렬 전\n";
    printVec(v);
 
    sort(v.begin(), v.end(), greater<int>());
    cout << "정렬 후\n";
    printVec(v);
 
    return 0;
}
cs