Trong C, loại thường thực hiện như trong ví dụ sau:nhầm lẫn về việc sử dụng std :: ít hơn và std :: lớn hơn với std :: sort
#include <stdio.h>
void Sort(int* arr, int n, bool(*cmp)(int,int))
{
for(int i=0; i<n-1; i++)
{
for(int j=i+1; j<n; j++)
{
if(cmp(arr[i], arr[j]))
swap(arr[i], arr[j]);
}
}
}
int ascending(int a, int b) { return a > b; } // greater
int descending(int a, int b) { return a < b; } // less
void main()
{
int arr[10] = { 1,3,5,7,9,2,4,6,8,10 };
// ascending
Sort(arr, 10, ascending);
for(int i=0; i<10; i++)
printf("%d ", arr[i]);
printf("\n");
// descending
Sort(arr, 10, descending);
for(int i=0; i<10; i++)
printf("%d ", arr[i]);
printf("\n");
}
Vì vậy, tôi đã viết một số nguồn như trong ví dụ sau đây, mong đợi kết quả tương tự:
#include <iostream>
#include <algorithm> // for sort
#include <functional> // for less & greater
using namespace std;
bool gt(int a, int b) { return a > b; } // greater
bool ls(int a, int b) { return a < b; } // less
void main()
{
int x[10] = { 1,3,5,7,9,2,4,6,8,10 };
// ascending but descending
sort(x, x+10, gt);
for(int i=0; i<10; i++)
cout << x[i] << " ";
cout << endl;
// descending but ascending
sort(x, x+10, ls);
for(int i=0; i<10; i++)
cout << x[i] << " ";
cout << endl;
greater<int> g; // a > b
less<int> l; // a < b
// ascending but descending
sort(x, x+10, g);
for(int i=0; i<10; i++)
cout << x[i] << " ";
cout << endl;
// descending but ascending
sort(x, x+10, l);
for(int i=0; i<10; i++)
cout << x[i] << " ";
cout << endl;
}
Nhưng kỳ vọng của tôi không chính xác.
Tại sao không sắp xếp trong STL hoạt động như sắp xếp trong C?
tôi có ý tưởng từ bạn! cảm ơn bạn trai! – user2063889