template <typename T1, typename T2> void sort(T1* x, int n, T2 cmp ) {
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
if (cmp(x[i], x[j])) {
T1 tmp = x[i];
x[i] = x[j];
x[j] = tmp;
}
}
}
}
int main()
{
int arr[] = { -1, 5, 7, 4, 3, -2, -3 };
sort(arr, 7, [](int a, int b) {return a > b; }); // Ascending
for (auto i : arr) cout << i << " ";
sort(arr, 7, [](int a, int b) {return a > b; }); // descendingscending
for (auto i : arr) cout << i << " ";
}
제너릭하게 이용할 수 있도록, compare 함수를 람다식으로 사용하여 사용했습니다.
버블 정렬
template <typename T1, typename T2> void sort(T1* x, int n, T2 cmp) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n-i -1; j++) {
if (cmp(x[j], x[j+1])) {
T1 tmp = x[j];
x[j] = x[j+1];
x[j+1] = tmp;
}
}
}
}
버블정렬도 비슷하게 compare 함수 느낌으로 구현합니다.
이러한 정렬을 다른 컨테이너도 쓸 수 있게 더 제너릭하게 만들고싶다면!!
template <typename T1, typename T2> void sort(T1 begin, T1 end, T2 cmp) {
for (auto i = begin; i != end; i++) {
for (auto j = i; j != end ; j++) {
if (cmp(*i, *j)) {
auto tmp = *i;
*i = *j;
*j = tmp;
}
}
}
}
int main()
{
int arr[] = { -1, 5, 7, 4, 3, -2, -3 };
sort(arr, arr +7, [](int a, int b) {return a > b; }); // Ascending
for (auto i : arr) cout << i << " ";
cout << endl;
sort(arr, arr +7, [](int a, int b) {return a < b; }); // Descending
for (auto i : arr) cout << i << " ";
}