在C,排序通常执行如下面的例子:混淆使用std ::少和std ::有更大的std ::排序
#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");
}
所以我写了一些源,如下面的例子中,期待相同的结果:
#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;
}
但我的期望是不正确的。
为什么不按照C排序在STL工作?
我从你那里得到了一个主意!谢谢,伙计! – user2063889 2013-02-13 02:11:39