지우너

C++ Sort()함수 본문

Programming/C++

C++ Sort()함수

지옹 2024. 5. 28. 13:53

#include <algorithm> 필수!

숫자 배열 정렬

n개의 숫자 배열이 주어질 때 오름차순(1, 2, 3)/내림차순(3, 2, 1)으로 정렬하는 방법  sort(arr, arr+n);

int main() {
    int n;
    cin >> n;
    int* arr= new int[n];
    for (int i=0;i<n;i++){
        cin >> arr[i];
    }

	// 오름차순 정렬 sort(arr, arr+n);
    	// 일반적으로는 평균 시간복잡도가 O(NlgN)인 퀵 정렬이 많이 이용된다.
    	// 다만 최근 Python, Java 등의 언어에서의 sort 함수는 Tim Sort로 이루어져 있다고 한다
    sort(arr, arr+n);
    for (int i=0;i<n;i++){
        cout << arr[i] << " ";
    }
    cout <<'\n';
    
    // 내림차순 정렬 sort(arr, arr+n, greater<int>());
    sort(arr, arr+n, greater<int>());
    for (int i=0;i<n;i++){
        cout << arr[i] << " ";
    }
    return 0;
}

 

 

문자 정렬 string

주어진 string을 사전순으로 정렬하기. sort(string.begin(), string.end());

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string s;
    cin >>s;
    sort(s.begin(), s.end());
    cout << s;
    return 0;
}

 

 

문자 배열 정렬 string array

문자 배열을 사전순으로 정렬하기. 숫자 배열과 마찬가지로 sort(arr, arr+n); 해주면 된다.

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;
int main() {
    int n;
    cin >>n;
    string* s = new string[n];
    for(int i=0;i<n;i++){
        cin >> s[i];
    }
    sort(s, s+n);
    for(int i=0;i<n;i++){
        cout << s[i] << '\n';
    }
    return 0;
}

 

 

내가 만든 클래스 정렬

bool operator < 또는 > 를 오버라이딩해서 원하는 순서대로 정렬(단, 클래스를 이용하는 것은 프로그래밍 속도 측면에서 유리하지 않으므로, 실무가 아닌 프로그래밍 대회에서는 vector와 pair를 사용하는 것이 유리하다.)

#include <iostream>
#include <algorithm>
using namespace std;

class Resource{
    public:
        string name, address, region;
    Resource(string name="", string address="", string region=""){
        this->name = name;
        this->address = address;
        this->region = region;
    }
    
    bool operator <(Resource &resource){
        return this->name >resource.name;
    }
};

int main() {
    int n;
    cin >> n;
    Resource r[10];
    for (int i=0;i<n;i++){
        string input_name, input_address, input_region;
        cin >> input_name >> input_address >> input_region;
        r[i] = Resource(input_name, input_address, input_region);
    }

    // 사전순으로 이름이 가장 느린 사람의 자료를 출력하는 프로그램
    sort(r, r+n);
    
    cout << "name " << r[0].name <<'\n';
    cout << "addr " << r[0].address <<'\n';
    cout << "city " << r[0].region <<'\n';

    return 0;
}

 

Vector<tuple<int,int,int>>정렬

#include <iostream>
#include <vector>
#include <tuple>
#include <algorithm>

using namespace std;

// 비교 함수 정의
bool compareTuples(const tuple<int, int, int>& a, const tuple<int, int, int>& b) {
    // 첫 번째 요소로 비교
    if (get<0>(a) != get<0>(b)) 
        return get<0>(a) < get<0>(b);

    // 두 번째 요소로 비교
    if (get<1>(a) != get<1>(b)) 
        return get<1>(a) < get<1>(b);

    // 세 번째 요소로 비교
    return get<2>(a) < get<2>(b);
}

int main() {
    // 벡터 초기화
    vector<tuple<int, int, int>> vec = {
        make_tuple(1, 2, 3),
        make_tuple(1, 2, 2),
        make_tuple(2, 1, 3),
        make_tuple(0, 1, 2),
        make_tuple(2, 0, 1)
    };

    // 벡터 정렬
    sort(vec.begin(), vec.end(), compareTuples);

    // 정렬된 벡터 출력
    for (const auto& t : vec) {
        cout << "(" << get<0>(t) << ", " << get<1>(t) << ", " << get<2>(t) << ")\n";
    }

    return 0;
}

 

 

참고 자료

https://blog.com24everyday.com/entry/C-Sort-%EC%82%AC%EC%9A%A9

 

C++ Sort() 사용

클래스 객체를 이용해서 정렬하는 건 실무에서 많이 사용되는 방법이고 프로그래밍 대회에선 실행 시간에 안 좋은 측면 때문에 자주 사용되지 않는다고 합니다. 실제로는 C++에 vector 라이브러리

blog.com24everyday.com