본문 바로가기

IT공부/알고리즘

C++ STL sort() 함수다루기01

C++ STL sort() 함수다루기01

정렬은 컴퓨터 공학의 오래된 연구 분야이므로 이미 아주 훌륭한 정렬관련 라이브러리가 존재한다. 그렇기 때문에 필요시 이 라이브러리를 가져다 쓰면 된다.

 

sort() 함수의 기본 사용방법

sort() 함수는 C++ algorithm 헤더에 포함되어 있다. 기본 사용법은 아래와 같다.

 

#include <iostream> //cout을 사용하게 해줌.

#include <algorithm>

 

using namespace std;

 

void show(int sort[]){

           for(int i = 0; i < 10; i++){

                      cout << sort[i] << ' ';

           }

}

 

int main(void){

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

                   //10은 가장 마지막 원소인 2를 말한다.(쉽게 말하면 데이터 개수를 +해주면된다.)

                                 //컴퓨터는 데이터가 9 ~ 2까지 있다는 것을 알 수 있다.

           sort(a, a + 10);

           show(a);

          

          

}

정렬기준 설정

sort() 함수는 정렬기준을 직접 설정할 수 있다.

 

#include <iostream> //cout을 사용하게 해줌.

#include <algorithm>

 

using namespace std;

 

bool compare(int a, int b){

           //작은 값이 앞으로 감.

           return a < b;

}

 

void show(int sort[]){

           for(int i = 0; i < 10; i++){

                      cout << sort[i] << ' ';

           }

}

 

int main(void){

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

                   //10은 가장 마지막 원소인 2를 말한다.(쉽게 말하면 데이터 개수를 +해주면된다.)

                                 //컴퓨터는 데이터가 9 ~ 2까지 있다는 것을 알 수 있다.

           sort(a, a + 10, compare); //기본적으로 sort() 함수는 오름차순이다.

           show(a);

          

          

}

객체로 정렬하는 방법

실무에서는  int a[10] = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2};와 같은 데이터를 정렬하지 않는다. 객체 안에 여러 변수를 두어 객체 단위로 정렬을 수행한다. 다음 예제코드를 보자.

 

#include <iostream> //cout을 사용하게 해줌.

#include <algorithm>

 

using namespace std;

 

class Student {

           public:

                      string name;

                      int score;

                      Student(string name, int score){

                                 this -> name = name;

                                 this -> score = score;

                      }

                      //정렬기준은 '점수가 작은 순서'.

                      //연산자 오버로딩. 기본에 제공하고 있는 연산자를 재정의하여 사용자 정의 클래스로 사용

                      //sort() 함수가 내부적으로 객체연산 즉, student01 < student02 연산을 하기 위해서.

                      //함수명을 operator로 해야 컴파일러가 연산자 오버로드 함수인 것을 인식시킨다.

                      bool operator < (Student &student){

                                 return this->score < student.score;

                      }

};

 

void show(Student students[]){

           for(int i = 0; i < 5; i++){

                      cout << students[i].name << ' ';

           }

}

 

int main(void){

           Student students[]= {

                      Student("윤강민", 90),

                      Student("이상욱", 93),

                      Student("박한울", 97),

                      Student("강종구", 87),

                      Student("이태일", 92)

           };

          

           //이미 Student 클래스에서 operator 함수를 구현했기 때문에 compare는 안넣어도 된다.

           sort(students, students + 5);

           show(students);

          

}

 

'IT공부 > 알고리즘' 카테고리의 다른 글

C++ STL sort() 함수다루기02  (0) 2020.07.29
병합정렬(Merge Sort)  (0) 2020.07.29
기초 정렬 알고리즘 문제 풀이  (0) 2020.07.28
퀵 정렬의 시간복잡도와 작동원리  (0) 2020.07.25
삽입정렬  (0) 2020.07.25