sort()関数の詳細な説明

序文

名前が示すように、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などのコンテナが赤黒木で実装され(理解してください)、要素自体が順序付けられているため、並べ替えの並べ替えが許可されていないためです。
例:ベクトル:
ここに画像の説明を挿入します
例:文字列:
ここに画像の説明を挿入します
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_46527915/article/details/114597901