ALGORITHM/C++

[sort] sort(정렬) 알고리즘

EARTH_ROOPRETELCHAM 2020. 12. 5. 20:20
728x90
반응형

sort algorithm

sort 알고리즘은 헤더 파일에 속해 있으므로, #include <algorithm>을 하여 사용해야 합니다.

sort(start, end)를 이용하여 [start,end) 범위에 속하는 인자들을 오름차순(default)으로 정렬할 수 있습니다.

따로 구현하지 않고 algorithm 헤더에 속한 sort을 사용하면, quick sort로 정렬된 결과를 얻을 수 있습니다.

vector 정렬 예

오름차순 정렬

#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<int> v = {1,3,2,4,6,8};
    printf("Before sort:::\n");
    for(int i = 0; i < v.size(); i++) 
        printf("%d ", v[i]);
    printf("\n");
    sort(v.begin(), v.end());
    printf("After sort:::\n");
    for(int i = 0; i < v.size(); i++)
        printf("%d ", v[i]);
    printf("\n");
    return 0;
}

내림차순 정렬

#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<int> v = {1,3,2,4,6,8};
    printf("Before sort:::\n");
    for(int i = 0; i < v.size(); i++) 
        printf("%d ", v[i]);
    printf("\n");
    sort(v.begin(), v.end(), greater<int>());
    printf("After sort:::\n");
    for(int i = 0; i < v.size(); i++)
        printf("%d ", v[i]);
    printf("\n");
    return 0;
}

사용자 정의 함수 정렬

Info 클래스를 생성하여, 해당 클래스 내의 name과 age 변수를 두고 name이 동일할 경우 age가 작은 순으로 정렬하도록 한 예제이다. 만약, name이 다르다면 name이 작은 순으로 정렬한다.

#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

class Info{
public:
    string name;
    int age;
    Info(string infoName, int infoAge) {
        name = infoName;
        age = infoAge;
    }
};

bool compare(Info a, Info b) {
    if(a.name == b.name) {
        return a.age < b.age;
    }
    else return a.name < b.name;
}

int main()
{
    vector<Info> v = {Info("abc", 1), Info("abc", 2), Info("abb", 2)};
    printf("Before sort:::\n");
    for (int i = 0; i < v.size(); i++)
        printf("Name: %s, Age: %d\n", v[i].name.c_str(), v[i].age);
    printf("\n");
    sort(v.begin(), v.end(), compare);
    printf("After sort:::\n");
    for (int i = 0; i < v.size(); i++)
        printf("Name: %s, Age: %d\n", v[i].name.c_str(), v[i].age);
    printf("\n");
    return 0;
}
728x90
반응형