自定義一個(gè)比較函數(shù),直接調(diào)用快排庫函數(shù)qsort即可。舉例如下:
創(chuàng)新互聯(lián)于2013年開始,先為衛(wèi)輝等服務(wù)建站,衛(wèi)輝等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為衛(wèi)輝企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
//#include?"stdafx.h"http://If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
#include?"stdlib.h"
#include?"time.h"
struct?ln{
int?data,score,math;
}ss[100];
int?mycmp(const?void?*a,?const?void?*b){//自定義比較函數(shù)
return?((struct?ln*)a)-data-((struct?ln*)b)-data;//若要降序,-號前后變量交換
}//data改為score或math就可按相應(yīng)要素排序
int?main(void){//測試一下……
int?i;
srand((unsigned)time(NULL));
for(i=0;i100;ss[i++].data=rand()%1000);
qsort(ss,100,sizeof(struct?ln),mycmp);
for(i=0;i100;printf("%4d",ss[i++].data));
printf("\n");
return?0;
}
函數(shù)kuaipai1 進(jìn)入了無限死循環(huán)。
遞歸函數(shù)沒有一個(gè)節(jié)點(diǎn)判定遞歸結(jié)束,導(dǎo)致進(jìn)入死循環(huán)
系統(tǒng)堆棧用完,程序崩潰。
程序調(diào)試報(bào)告有無限死循環(huán)危險(xiǎn),運(yùn)行后就直接崩潰,導(dǎo)致棧溢出。
快排即qsort,包含在stdlib.h頭文件里,函數(shù)一共四個(gè)參數(shù),沒返回值.一個(gè)典型的qsort的寫法如下:qsort(s,n,sizeof(s[0]),cmp);
其中第一個(gè)參數(shù)是參與排序的數(shù)組名;
第二個(gè)參數(shù)是參與排序的元素個(gè)數(shù); 第三個(gè)三數(shù)是
單個(gè)元素的大小,推薦使用sizeof(數(shù)組名)這樣的表達(dá)式,下面也有說明 :)
;第四個(gè)參數(shù)就是
比較函數(shù)。
典型的cmp的定義是
int
cmp(const void *a,const void *b);
返回值必須是int,兩個(gè)參數(shù)的類型必須都是const void
*.
假設(shè)是對int排序的話,如果是升序,那么就是如果a比b大返回一個(gè)正值,小則負(fù)值,相等返回
0,其他的依次類推,下面給出簡單例子:
#include?stdio.h
#include?string.h
#include?stdlib.h
int?s[10000],n,i;
int?cmp(const?void?*a,?const?void?*b)
{?
return(*(int?*)a-*(int?*)b);
}
int?main()
{
scanf("%d",n);
for(i=0;in;i++);
scanf("%d",s[i]);
qsort(s,n,sizeof(s[0]),cmp);
for(i=0;in;i++)?printf("%d?",s[i]);
return(0);
}