序文
名前が示すように、sort()はソート関数であり、特定の状況に応じて異なるソート方法を使用するため、より効率的です。
一般的に、c言語でqsort関数を使用することはお勧めしません。これは、qsortの使用がより面倒であり、多くのポインター操作が必要になるためです。
さらに、ソートは、実際の複雑さがその実装でO(n 2)に縮退する原因となる可能性がある従来のクイックソートで発生する可能性のある極端な状況を回避します。
言うまでもありませんが、sort()関数の使用法を見てみましょう。
並べ替えを使用
必要なヘッダーファイル
#include<algorithm>
その他の必要なもの:
using namespace std;
使用する方法は次のとおりです。
sort(首元素地址(必填), 尾元素地址的下一个地址(必填), 比较函数(非必填));
比較関数は、必要に応じて入力できます。比較関数が記述されていない場合、上記の間隔はデフォルトで昇順で並べ替えられます。
例:int配列とdouble配列を並べ替えてchar配列を並べ替え
ます。
其实你会发现一个规律。
例如: 你要排前三个数 sort(a,a+3);
你要排前六个数 sort(a,a+6);
你要排前n个数 sort(a,a+n);
シーケンスを並べ替える必要がある場合は、シーケンス内の要素が比較可能である必要があるため、この比較可能性を確立するために並べ替えルールを作成する必要があることを知っておく必要があります。
特に構造のように、サイズと比較ルールの間に関係はありません。
ソートの3番目のオプションのパラメーターは、このルールを実装するために使用される比較関数(通常はcmp関数として記述されます)です。
比較関数cmpを実装します
大きいものから小さいものに並べ替える場合は、比較関数cmpを使用して、要素を交換するタイミングを「指示」する必要があります(要素のサイズの比較を逆にします)。
構造体配列のソート
これで、次の構造が定義されました。
struct student
{
int x,y;
};
構造体配列をxに従って大きいものから小さいものへと並べ替える場合は、次のようにcmp関数を記述できます。
bool cmp(student a,student b)
{
return a.x>b.x;//按x值从大到小对结构体排序
}
構造体配列を並べ替えるときは、ルールを指定するためにcmp関数を作成する必要があります。
例は次のとおり
です。xで最大から最小に並べ替える(つまり、第1レベルの並べ替え)が、xが等しい場合は、最小から最大にyのサイズで並べ替える(つまり、第2レベルの並べ替え) 。
次に、cmpの表現は次のとおりです。
bool cmp(student a,student b)
{
if(a.x==b.x)//x值相等时按y从小到大排
{
return a.y<b.y;
}
return a.x>b.x;//按x值从大到小对结构体排序
}
或
bool cmp(student a,student b)
{
if(a.x != b.x)//x值不相等时按x从大到小排
return a.x>b.x;
else
return a.y<b.y;//x相等时按y值从小到大对结构体排序
}
コンテナの仕分け
STL標準コンテナでは、vector、string、およびdequeのみがsortを使用できます。
これは、setやmapなどのコンテナが赤黒木で実装され(理解してください)、要素自体が順序付けられているため、並べ替えの並べ替えが許可されていないためです。
例:ベクトル:
例:文字列: