天天看點

C++sort函數使用總結

頭檔案:algorithm

對于(整數/字元)數組進行比較時,可直接通過sort(a,a+n)或sort(a.begin(),a.end())進行排序,預設升序排列,需要快速實作降序時,有三種方案

1.反轉升序數組(reserve函數)

2.反向疊代sort(a.rend(),a.rbegin())

3.借助C++庫函數,greater<類型>()降序       less<類型>()升序     頭檔案:functional

當對結構體進行排序時,需要自己寫比較函數,曾了解qsort的都知道,C中的qsort排序函數寫起來比較麻煩,因為傳入的類型是const void * ,函數内部還需要進行強制轉換,而sort隻需正常傳入資料進行比較即可。

eg:

#include<iostream>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<functional>
#include<string>
using namespace std;

typedef struct node{
	int x,y,z;
}node;
node s[10];\
int cmp(node a,node b)
{
if(a.x!=b.x)return a.x<b.x;
else if(a.y!=b.y)return a.y<b.y;
else return a.z<b.z;
}
int main()
{
	srand((unsigned)time(NULL));
	for(int i=0;i<10;i++)
	{
		s[i].x=rand()%5;
		s[i].y=rand()%10;
		s[i].z=rand()%20;
	}
	for(i=0;i<10;i++)
	{
		cout<<s[i].x<<"   "<<s[i].y<<"   "<<s[i].z<<"\n";
	}
	sort(s,s+10,cmp);
	cout<<"\n\n";
	for(i=0;i<10;i++)
	{
		cout<<s[i].x<<"   "<<s[i].y<<"   "<<s[i].z<<"\n";
	}
	return 0;
}
           

這裡進行了結構體的多級排序。

當對字元串數組進行排序時,可以利用C中的strcmp傳回自定義函數結果。

對于String,其可以如同數組一樣使用,但不能利用C字元串函數,可使用C++标準庫字元串函數。

除了,結構體,字元串數組,sort函數都可以利用C++标準函數實作快速排序,包括pair,vector等類型,未來掌握的更加完善了再繼續本文總結。

補:

當我們從0到n-1向數組中輸入資料時,排序時sort(a,a+n),當我們需要對其中的部分排序時,隻需要sort(a+x,a+n),x>=0(0時是全排序)排序後的結果将以a+x為起點存入。

當我們從1到n向數組中輸入資料時,排序時sort(a+1,a+n+1),當我們需要對其中的部分排序時,隻需要sort(a+x,a+n+1),x>=1,排序後的結果将以a+x為起點存入。