const c語(yǔ)言 c語(yǔ)言運(yùn)用sort排序函數(shù),需要的頭文件是什么?
c語(yǔ)言運(yùn)用sort排序函數(shù),需要的頭文件是什么?#此函數(shù)用于比較兩個(gè)函數(shù)。{return*(int*)a-*(int*)B}int main(){int a[10]={2,4,1,5,5,3,7,4,
c語(yǔ)言運(yùn)用sort排序函數(shù),需要的頭文件是什么?
#此函數(shù)用于比較兩個(gè)函數(shù)。{return*(int*)a-*(int*)B}int main(){int a[10]={2,4,1,5,5,3,7,4,1,5}//無(wú)序數(shù)組。Int i qsort(a,10,sizeof(Int,COMP)//調(diào)用qsort sort for(i=0I<10i)//輸出排序數(shù)組{printf(%d”,a[i])}返回0}
在C和C中,排序函數(shù)的用法不同。C語(yǔ)言中沒(méi)有預(yù)設(shè)的排序函數(shù)。如果你想用C語(yǔ)言調(diào)用sort函數(shù),你需要定制一個(gè)排序函數(shù),或者使用C語(yǔ)言自己的qsort函數(shù),它的頭文件是stdlib。H.
為什么自己寫的qsort比不上C語(yǔ)言庫(kù)里自帶的qsort效率高?
1。程序的效率受許多因素的影響。例如,在一個(gè)代碼段中遞歸實(shí)現(xiàn)快速調(diào)度的效率遠(yuǎn)遠(yuǎn)低于非遞歸實(shí)現(xiàn),因?yàn)檫f歸本質(zhì)上是一個(gè)函數(shù)調(diào)用,它會(huì)對(duì)調(diào)用堆棧的分配和循環(huán)產(chǎn)生開(kāi)銷;程序的編譯方法也會(huì)影響運(yùn)行效率,調(diào)試模式比發(fā)布模式慢,發(fā)布模式的打開(kāi)速度最快,優(yōu)化編譯模式比非優(yōu)化編譯模式慢。另外,代碼結(jié)構(gòu)的合理安排也會(huì)影響速度。例如,過(guò)多的代碼跳轉(zhuǎn)會(huì)減慢速度。這里的跳轉(zhuǎn)是機(jī)器代碼中的跳轉(zhuǎn),比如函數(shù)調(diào)用,如果。否則跳轉(zhuǎn)會(huì)破壞CPU的預(yù)讀機(jī)制,影響效率。算法介紹中的例子只是算法實(shí)現(xiàn)的基本演示,需要在實(shí)踐中加以優(yōu)化。
2. 至于它崩潰的原因,我猜是因?yàn)檫f歸深度太深,堆??臻g耗盡。如果你沒(méi)記錯(cuò)的話,VC的默認(rèn)堆??臻g是1MB。假設(shè)函數(shù)調(diào)用的層數(shù)只有100W,并且每層調(diào)用堆棧只分配一個(gè)int大小,那么它也會(huì)消耗4m的空間。事實(shí)上,需求遠(yuǎn)不止這些,程序崩潰是很自然的。您可以嘗試更改編譯器配置中的默認(rèn)堆棧大小。或者該算法可以用非遞歸的方式實(shí)現(xiàn)。
C語(yǔ)言關(guān)于qsort函數(shù)用法?
我建議您嘗試以下操作:
首先定義數(shù)組的大?。?/p>
然后定義數(shù)組比較函數(shù):
注意:
更安全的調(diào)用方法是qsortuus
然后調(diào)用qsort函數(shù)進(jìn)行排序,具體邏輯如下
代碼合并如下:]這里只是一個(gè)基于您數(shù)據(jù)的二維數(shù)組,可以根據(jù)您的具體情況進(jìn)行調(diào)整;另外,關(guān)于qsort函數(shù)的用法,請(qǐng)參考qsort
:比較函數(shù)的返回值,這里是一個(gè)表:
最后,以上代碼的結(jié)果如下:
]#Include<stdio。H>#包括<stdlib。H>int CMP(const void*a,const void*b)//排序規(guī)則(降序){return*(int*)b-*(int*)a}int main(){int a[]={1,2,3,4,5,6}qsort(a,6,sizeof(int),CMP)//a是排序的數(shù)組,6是排序的元素?cái)?shù)sizeof(int)是每個(gè)元素占用的字節(jié)數(shù)。CMP是(int i=0I<6i)//output printf(%d“,&A[i])return 0}]~的排序規(guī)則!C語(yǔ)言中沒(méi)有預(yù)設(shè)的排序函數(shù)。如果在C語(yǔ)言中有對(duì)sort函數(shù)的調(diào)用,則它是一個(gè)用戶定義的函數(shù)。該函數(shù)通常用于排序。1、 您可以編寫自己的排序函數(shù)。下面的函數(shù)是將整數(shù)數(shù)組從小到大排序。Void sort(int*a,int l)//a是數(shù)組地址,l是數(shù)組長(zhǎng)度。{int i,jint V//對(duì)(i=0,IA[J])的正文進(jìn)行排序//如果前者大于后者,則交換。{a[i]=a[J]a[J]=V}}對(duì)于這種自定義排序函數(shù),可以根據(jù)定義的規(guī)范調(diào)用它。功能:使用快速排序例程排序頭文件:stdlib。H原型:void qsort(void*base,int nelem,int width,int(*FCMP)(const void*,const void*)參數(shù):1要排序的數(shù)組的第一個(gè)地址2要排序的元素?cái)?shù)3每個(gè)元素占用的空間4指向函數(shù)的指針以確定排序順序。此函數(shù)必須編寫自己的比較函數(shù),即使要排序的元素是C語(yǔ)言的基本類型(如int和float)。以下是qsort的示例:#include
排序需要比較。對(duì)于結(jié)構(gòu),沒(méi)有現(xiàn)成的比較方法,因此必須人為地規(guī)定結(jié)構(gòu)的比較方法。您可以使用qsort函數(shù)進(jìn)行排序,該函數(shù)必須傳入比較函數(shù)。例如:intmycmp(constvoid*a,constvoid*b){return(*(Information*)a->average>(*(Information*)b->average?1: - 1}