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))複雑性が保証されています。一般的な実装では、クイックソートまたはイントロソートを使用します。

true比較関数は、最初の引数が厳密に 2 番目の引数よりも小さい場合に返さなければならない 2 項関数です。実装では、この関数を使用してコンテナーの 2 つの要素を比較し、どちらが他の要素よりも優先されるかを判断します。したがってabコンテナー内の任意の 2 つの要素である可能性があります。この関数は、要素に対して厳密な弱い順序付けを行う必要があります。あれは:

  • 要素はそれ自体よりも小さいことはありません
  • ならば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

最初のパラメーターは開始ポインターです。2 番目のパラメーターは終了ポインターです。3 番目のパラメーターはオプションです。ソート方法を定義する比較関数です。

于 2013-02-04T14:53:50.960 に答える