1

在下面的代码中,sort()函数是如何工作的?例如,如果我们有一个数组:

a [5] = {1,2,3,4,5};

我使用我的函数按降序对它进行排序bool cmp(),我想知道:它是如何工作的,哪个元素是哪个元素int a(函数int b中的参数bool cmp()),什么时候排序,什么时候bool cmp()返回 1,什么时候返回0?

#include <iostream>
#include <algorithm>

using namespace std;
bool cmp (int a , int b)
{
    return (a > b );
}

int main ()
{
    int a[100];
    int n;
    cin >> n;
    for (int i=0 ; i<n ;i++)
        cin >> a[i];

    sort(a,a+n,cmp);
    cout << endl << endl;
    for (int i=0 ; i<n ;i++)
        cout << a[i] << " ";



    return 0;
}
4

2 回答 2

2

如何实现取决于标准库的实现。它保证具有O(Nlog(N))复杂性。常见的实现使用quicksortintrosort

true比较函数是一个二进制函数,如果第一个参数严格小于第二个,则必须返回。该实现使用此函数来比较容器的两个元素,以确定哪些应该先于其他元素 - 因此a并且b可能是容器中的任何两个元素。此函数必须对元素进行严格的弱排序。那是:

  • 一个元素永远不会小于它自己
  • 如果x < y,那么情况并非如此y < x
  • 如果x < yy < z,那么x < z

如果您不提供比较功能,operator<则使用。等效地,您可以std::less作为比较函数传递。

于 2013-02-04T14:53:42.197 回答
0

在此处查看排序方法的参考:http: //en.cppreference.com/w/cpp/algorithm/sort

第一个参数是起始指针。第二个参数是结束指针。第三个参数是可选的。它是定义如何排序的比较函数。

于 2013-02-04T14:53:50.960 回答