- sort() 함수의 기본 사용법
sort() 함수는 C++의 algorithm 헤더에 포함되어 있다. 기본 사용법은 다음과 같다.
#include <iostream>
#include <algorithm>
using namespace std;
int main(void) {
int a[10] = {9, 3, 5, 4 ,1, 10, 8, 6, 7, 2};
sort(a, a + 10);
for(int i = 0; i < 10; i++) {
cout << a[i] << ' ';
}
}
C++ 은 C와 굉장히 흡사한 구조를 가지고 있고, C에 객체지향프로그래밍 기법을 더한 문법이라고 보면 된다.
sort() 함수는 기본적으로 오름차순 정렬을 수행한다. 위와 같이 배열의 시작점 주소와 마지막 주소 + 1을 적으면 된다.
sort(a, a+10) -> sort(배열 변수명, 정렬할 데이터의 개수) 이다.
#include <iostream>
#include <algorithm>
using namespace std;
bool compare(int a, int b) {
return a < b;
}
int main(void) {
int a[10] = {9, 3, 5, 4 ,1, 10, 8, 6, 7, 2};
sort(a, a + 10, compare);
for(int i = 0; i < 10; i++) {
cout << a[i] << ' ';
}
}
위 소스코드는 기본적인 sort()함수의 숨겨진 부분까지 쓴 것이라고 할 수 있다.
sort() 함수가 좋은 이유는 정렬의 기준을 자신이 원하는 형태로 설정할 수 있다는 점이다.
위와 같이 compare()함수를 만들어서 sort()의 세 번째 인자 값으로 넣게 되면, 해당 함수의 반환 값에 맞게 정렬이 동작한다. 위 소스 코드의 실행 결과는 앞서 다룬 소스코드와 동일하게 오름차순으로 정렬된 것을 볼 수 있다.
#include <iostream>
#include <algorithm>
using namespace std;
bool compare(int a, int b) {
return a > b;
}
int main(void) {
int a[10] = {9, 3, 5, 4 ,1, 10, 8, 6, 7, 2};
sort(a, a + 10, compare);
for(int i = 0; i < 10; i++) {
cout << a[i] << ' ';
}
}
위와 같이 a와 b를 비교하는 부분에서 반환 값만 큰 return a > b으로 바꿔주면 내림차순 정렬로 변환되는 것을 확인할 수 있다. 즉, 두개의 데이터를 비교함에 있어서 왼쪽에 있는 것이 더 클 수 있도록 정렬하겠다라는 소리이다.
따라서 실행결과는 내림차순 정렬이 수행되게 된다.
- 데이터를 묶어서 정렬하는 방법
위와 같은 단순 데이터 정렬 기법은 실무에서 사용하기에 적합하지 않다.
실무에서 프로그래밍을 할 때는 모든 데이터들이 객체로 정리되어 내부적으로 여러 개의 변수를 포함하고 있기 때문이다.
이 경우 가장 중요한 정렬 방식은 ' 특정한 변수를 기준으로' 정렬하는 것이다.
#include <iostream>
#include <algorithm>
using namespace std;
class Student {
public:
string name;
int score;
Student(string name, int score) {
this->name = name;
this->score = score;
}
// 정렬 기준은 '점수가 작은 순서'
bool operator < (Student &student) {
return this->score < student.score;
}
};
int main(void) {
Student students[] = {
Student("민지", 90),
Student("해린", 93),
Student("다니엘", 91),
Student("하니", 85),
Student("혜인", 80),
};
sort(students, students + 5);
for (int i = 0; i < 5; i++) {
cout << students[i].name << ' ';
}
}
위 소스코드는 점수를 기준으로 학생을 정렬해서 이름을 출력하는 것이다.
이를 퀵 정렬, 병합 정렬 등의 함수 안에서 구현하고자 하면 굉장히 복잡해질 수 있는데, sort()함수의 문법을 지키면서 구현하는 것은 위와 같은 클래스를 이용해 작업하면 된다. 출력결과는 다음과 같다.
'공부 기록 일지 > Algorithm' 카테고리의 다른 글
힙 정렬 (Heap Sort) (0) | 2023.09.21 |
---|---|
C++ STL sort() 함수 다루기 #2 (0) | 2023.09.19 |
병합 정렬(Merge Sort) (0) | 2023.09.15 |
퀵 정렬(Quick Sort) (0) | 2023.09.11 |
삽입 정렬(Insertion Sort) (2) | 2023.09.11 |