當前位置:成語大全網 - 書法字典 - Poj字典順序

Poj字典順序

就用快排吧,沒必要用什麽插入或者冒泡,效率太低了!!!!!!

c++ Qport函數應用大全中Qport()排序函數的使用

七種qsort排序方法

& lt在本文中,排序是由小到大》的:

首先,對int類型數組進行排序

int num【100】;

樣本:

int cmp(常量void *a,常量void *b)

{

return *(int *)a-*(int *)b;

}

qsort(num,100,sizeof(num【0】),CMP);

其次,對char類型的數組進行排序(與int類型相同)

char word【100】;

樣本:

int cmp(常量void *a,常量void *b)

{

return *(char *)a-*(int *)b;

}

qsort(word,100,sizeof(word【0】,CMP);

第三,對double類型數組進行排序(要特別註意)

double in【100】;

int cmp(常量void *a,常量void *b)

{

return *(double *)a & gt;*(雙*)b?1 : -1;

}

qsort(in,100,sizeof(in【0】),CMP);

第四,在第壹層對結構進行排序

結構輸入

{

雙數據;

int other

} s【100】

//根據數據的值從小到大對結構進行排序。結構中有多種類型的排序關鍵數據。請參照上面的例子來寫。

int cmp(常量void *a,常量void *B)

{

return(*(In *)a)-》;數據& gt(*(In *)B)-》;數據?1 : -1;

}

qsort(s,100,sizeof(s【0】),CMP);

5.二階結構。

結構輸入

{

int x;

int y;

} s【100】;

//按X從小到大排序,當X相等時按Y從大到小排序。

int cmp(常量void *a,常量void *b)

{

*c中的結構=(In *)a;

結構In * d =(In *)b;

if(c-》;x!= d-》;x)返回c-》;x-d-》;x;

否則返回d-& gt;y-c-》;y;

}

qsort(s,100,sizeof(s【0】),CMP);

第六,對字符串進行排序

結構輸入

{

int數據;

char str【100】;

} s【100】;

//根據結構中字符串str的字典順序進行排序。

int cmp(常量void *a,常量void *b)

{

return strcmp(*(In *)a)-& gt;str,(*(In *)B)-》;str);

}

qsort(s,100,sizeof(s【0】),CMP);

7.計算幾何中尋找凸包的cmp算法

int CMP(const void * a,const void * b)//key CMP函數,該函數按旋轉角度對除1以外的所有點進行排序。

{

結構點*c=(點*)a;

結構點*d=(點*)b;

if(calc(* c、*d,p【1】)& lt;0)返回1;

else if(!calc(* c,*d,p【1】);& ampdis(c-》;x,c-》;y,p【1】。x,p【1】。y)& lt;dis(d-》;x,d-》;y,p【1】。x,p【1】。y))//如果妳在壹條直線上,把遠的放在前面。

返回1;

else返回-1;

}

在c++中加載頭文件“iostream”

c語言中的qsort函數包含在

/*六種qsort排序方法

ANSI C標準中提供了qsort函數。它在stdlib.h文件中聲明,並根據二進制分布編寫。其時間復雜度為n * log(n),其結構如下:

void qsort(void * base,size_t nelem,size_t width,int(* Comp)(const void *,const void *));

其中包括:

*base是要排序的數組。

Nelem是要排序的數組的長度。

寬度是數組元素的大小(以壹個字為單位)。

(* comp)(const void * p 1,constvoid * p2)是判斷size函數的指針,需要自己定義。如果p 1》;P2,該函數返回-1;a & ltb、函數返回1;a==b函數返回0。

前段時間,我發現qsort函數非常好用,但有時不太好用,比如按結構排序、按字符串排序等。,所以我通過查閱資料整理了壹下。

以下是具體的分類和用法(除非另有說明,否則按升序排列):

示例1:對壹維數組進行排序

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

int Comp(const void * p 1,const void *p2)

{

return *(int *)p 1)-*((int *)p2);

}

int main()

{

int list【100】;

for(int I = 0;我& lt10;i++)

scanf(“% d“,& amplist【I】);

qsort(list,10,sizeof(int),Comp);

for(int I = 0;我& lt10;i++)

printf(“% d“,list【I】);

系統(“暫停”);

返回0;

}

示例2:排序字符串

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & ltstring.h & gt

int Comp(const void * p 1,const void *p2)

{

return strcmp((char *)p 1,(char *)p2);

}

int main()

{

char a【100】【100】;

for(int I = 0;我& lt3;i++)

get(a【I】);

qsort(a,3,sizeof(a【0】),Comp);

for(int I = 0;我& lt3;i++)

puts(a【I】);

系統(“暫停”);

返回0;

}

示例3:按結構中的關鍵字排序(在第壹層對結構排序):

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

結構ab

{

int vote 1;

int id

} ABC【6】;

int cmp(常量void *a,常量void *b)

{

return((struct ab *)a)-& gt;vote 1-((struct ab *)b)-》;vote 1;

}

int main()

{

for(int I = 0;我& lt5;i++)

scanf(“% d“,& ampABC【I】。vote 1);

qsort((void *)ABC,5,sizeof(ABC【0】),CMP);

for(int I = 0;我& lt5;i++)

printf(“% d“,ABC【I】);

系統(“暫停”);

返回0;

}

示例4:按結構中的多個關鍵字排序(結構的多級排序)【以第二級為例】:

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

結構ab

{

int x;

int y;

} ABC【6】;

int cmp(常量void *a,常量void *b)

{

if(((struct ab *)a)-& gt;x!=((struct ab *)b)-》;x)

return((struct ab *)a)-& gt;x-((struct ab *)b)-》;x;

其他

return((struct ab *)a)-& gt;y-((struct ab *)b)-》;y;

}

int main()

{

for(int I = 0;我& lt5;i++)

{

scanf(“% d % d“,& ampABC【I】。x & amp;ABC【I】。y);

}

qsort((void *)ABC,5,sizeof(ABC【0】),CMP);

for(int I = 0;我& lt5;i++)

printf(“% d % d“,ABC【I】。x,ABC【I】。y);

系統(“暫停”);

返回0;

}

示例5:對結構中的字符串進行排序:

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & ltstring.h & gt

結構ab

{

int x;

char AC【100】;

} ABC【6】;

int cmp(常量void *a,常量void *b)

{

return strcmp(((struct ab *)a)-& gt;ac,((struct ab *)b)-》;AC);

}

int main()

{

for(int I = 0;我& lt5;i++)

{

獲取(ABC【I】。AC);

}

qsort((void *)ABC,5,sizeof(ABC【0】),CMP);

for(int I = 0;我& lt5;i++)

看跌期權。AC);

系統(“暫停”);

返回0;

}

6.計算幾何中尋找凸包的代價。

//下面是我從別人那裏抄來的,還沒用過。

int Comp(const void * p 1,const void *p2)

//Key Comp函數,對除1以外的所有點的旋轉角度進行排序。

{

struct point * c =(point *)p 1;

結構點*d=(點*)p2;

if(CaCl(* c,*d,p【1】)& lt;0)返回1;

else if(!CaCl(* c,*d,p【1】);& ampdis(c-》;x,c-》;y,p【1】。x,p【1】。y)& lt;dis(d-》;x,d-》;y,p【1】。x,p【1】。y)

//如果妳在壹條直線上,把遠的放在前面。

返回1;

else返回-1;

}

第三,ANSI C標準中提供了P.S.:qsort函數。它在stdlib.h文件中聲明,並根據二進制分布編寫。其時間復雜度為n * log(n),其結構如下:

void qsort(void * base,size_t nelem,size_t width,int(* Comp)(const void *,const void *));

其中包括:

*base是要排序的數組。

Nelem是要排序的數組的長度。

寬度是數組元素的大小(以壹個字為單位)。

(* comp)(const void * p 1,constvoid * p2)是判斷size函數的指針,需要自己定義。如果p 1》;P2,該函數返回-1;a & ltb、函數返回1;a==b函數返回0。

//////////////

另請參見qsort - zju2727。

根據給定關鍵字的三級排序問題直接插入已總結的qsort模型中,它是AC。是上次總結的補充例子。

源代碼:

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & ltstring.h & gt

結構節點{

字符名稱【100】;

int年,價格;

} Book【100】;

/* - */

/* int compy(const void * p 1,const void * p2)//首先按年份排序。

{

struct Node * c =(Node *)p 1;

struct Node * d =(Node *)p2;

if(c-》;年!= d-》;年份)返回c-》;公元年-》;年份;

else if(strcmp(*(Node *)p 1)。名稱,(*(節點*)p2)。姓名))

返回strcmp(*(Node *)p 1)。名稱,(*(節點*)p2)。姓名);

否則返回c-& gt;價格-d-》;價格;

}

int compp(const void * p 1,const void * p2)//首先按價格排序。

{

struct Node * c =(Node *)p 1;

struct Node * d =(Node *)p2;

if(c-》;價格!= d-》;價格)返回c-& gt;價格-d-》;價格;

else if(strcmp(*(Node *)p 1)。名稱,(*(節點*)p2)。姓名))

返回strcmp(*(Node *)p 1)。名稱,(*(節點*)p2)。姓名);

否則返回c-& gt;公元年-》;年份;

}

int compn(const void * p 1,const void * p2)//首先按名稱排序。

{

struct Node * c =(Node *)p 1;

struct Node * d =(Node *)p2;

if(strcmp(*(Node *)p 1)。名稱,(*(節點*)p2)。姓名))

返回strcmp(*(Node *)p 1)。名稱,(*(節點*)p2)。姓名);

else if(c-》;年!= d-》;年份)返回c-》;公元年-》;年份;

否則返回c-& gt;價格-d-》;價格;

}

/* - */

/* void outres(int n)

{

int I;

for(I = 0;我& ltn;i++)

printf(“% s % d % d \ n“,Book【I】。名,書【我】。年,書【我】。價格);

}

/* - */

/*int main()

{

int n;

char格式【15】;

//freopen(“in . txt“,“r“,stdin);

scanf(“% d“,& ampn);

{

for(int I = 0;我& ltn;i++)

scanf(“% s % d % d“,Book【I】。姓名& amp書【我】。年份和年份。書【我】。價格);

scanf(“% s“,格式);

if(format【0】= =‘Y‘)

{

qsort(Book,n,sizeof(Book【0】),CompY);

}

else if(format【0】= =‘P‘)

{

qsort(Book,n,sizeof(Book【0】),CompP);

}

其他

{

qsort(Book,n,sizeof(Book【0】),CompN);

}

outres(n);

scanf(“% d“,& ampn);

if(n)printf(“\ n“);

}

返回0;

}

*/

poj3664

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

結構ab

{

int vote 1;

int vote2

int id

} ABC【1000000】;

int CMP 1(const void * a,const void *b)

{

return((struct ab *)a)-& gt;vote 1-((struct ab *)b)-》;vote 1;

}

int CMP 2(const void * a,const void *b)

{

return((struct ab *)a)-& gt;vote 2-((struct ab *)b)-》;vote2

}

int main()

{

int i,j,k;

scanf(“% d % d“,& ampj & amp;k);

for(I = 0;我& ltj;i++)

{

scanf(“% d % d“,& ampABC【I】。vote 1。ABC【I】。vote 2);

ABC【I】。id = I+1;

}

qsort((void *)ABC,j,sizeof(ABC【0】),CMP 1);

qsort((void *)(& amp;ABC【j-k】)、k、sizeof(ABC【0】)、CMP 2);

printf(“% d \ n“,ABC【j-1】。id);

//system(“pause“);

返回0;

}