sort()函式與qsort()函式及其標頭檔案
sort()函式是C++中的排序函式其標頭檔案為:#include<algorithm>標頭檔案;qsort()是C中的排序函式,其標頭檔案為:#include<stdlib.h>
先說一下qsort()吧,搜尋到的資料容易懂一些。
六類qsort排序方法
qsort函式很好用,但有時不太會用比如按結構體一級排序、二級排序、字串排序等。
函式原型:void qsort(void *base,size_t nelem,size_t width,int (*fcmp)(const void*,const void *))
輸入引數:
base 待排序的陣列,nelem 陣列元數的個數(長度),width 每一個元素所佔儲存空間的大小,fcmp 用於對陣列元素進行比較的函式的指標(該函式是要自己寫的),返回值為1或-1(p1>p2則返回-1,p1<p2則返回1,p1==p2則返回0),size_t是int
輸出引數:base 以升序排列
以下是其具體分類及用法(若無具體說明是以降序排列):
1、對一維陣列排序:
(Element_type 是一位陣列中存放的資料型別,可以是char,int,float,double,ect)
int comp(const void *p1,const void *p2)
{
return *((Element_type*)p2)>*((Element_type*)p1)?1:-1;
}
int main()
{
Element_type list[MAX];
initial(list);//這是對陣列list[max]初始化
qsort(list, sizeof(list),sizeof(Element_type),Comp);//呼叫函式qsort
return 0;
}
2、對字串排序:
int Comp(const void *p1,const void *p2)
{
return strcmp((char *)p2,(char *)p1);
}
int main()
{
char a[MAX1][MAX2];
initial(a);
qsort(a,lenth,sizeof(a[0]),Comp);
//lenth 為陣列a的長度
3、按結構體中某個關鍵字排序(對結構體一級排序):
struct Node
{
double data;
int other;
}s[100];
int Comp(const void *p1,const void *p2)
{
return (*(Node *)p2)->data > (*(Node *)p1)->data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),Comp);
4、按結構體中多個關鍵字排序(對結構體多級排序)[以二級為例]:
struct Node
{
int x;
int y;
}s[100];
//按照x從小到大排序,當x相等時按y從大到小排序(這是3跟4的區別)
int Comp(const void *p1,const void *p2)
{
struct Node *c=(Node *)p1;
struct Node *d=(Node *)p2;
if(c->x!=d->x)