w C, sortowania zwykle implementuje jak w poniższym przykładzie:zamieszanie na temat korzystania z std :: mniejsze i większe z std :: 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");
}
Więc napisałem jakieś źródło, jak w poniższym przykładzie, Oczekuję tego samego wyniku:
#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;
}
Ale moje oczekiwania nie były prawidłowe.
Dlaczego sortowanie w STL nie działa jak sortowanie w C?
Mam pomysł od Ciebie! Dzięki ziomek! – user2063889