지우너
C++ Sort()함수 본문
#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
'Programming > C++' 카테고리의 다른 글
생성자(constructor)와 멤버 초기화 리스트(member initializer list) (0) | 2024.08.11 |
---|---|
C++ Set 사용하기 (0) | 2024.08.07 |
C++ 클래스(Class) (0) | 2024.05.30 |
[C++] array, string, vector size 구하기 (0) | 2024.05.27 |