C函數(shù)qsort的簡介和用法,新手入門PPT_第1頁
C函數(shù)qsort的簡介和用法,新手入門PPT_第2頁
C函數(shù)qsort的簡介和用法,新手入門PPT_第3頁
C函數(shù)qsort的簡介和用法,新手入門PPT_第4頁
C函數(shù)qsort的簡介和用法,新手入門PPT_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1,C函數(shù)qsort的簡介和用法,BY:SMJUN,2,C函數(shù)qsort實(shí)現(xiàn)快速排序,排序方法有很多種:選擇排序,冒泡排序,歸并排序,快速排序等??疵侄贾揽焖倥判?是目前公認(rèn)的一種比較好的排序算法,比選擇排序,冒泡排序都要快。因?yàn)樗乃俣群芸欤韵到y(tǒng)也在庫里實(shí)現(xiàn)這個(gè)算法,便于我們的使用。這就是qsort,3,qsort簡介,qsort函數(shù)是ANSI C標(biāo)準(zhǔn)中提供的,其聲明在stdlib.h文件中,是根據(jù)二分發(fā)寫的,其時(shí)間復(fù)雜度為n*log(n),其結(jié)構(gòu)為: void qsort(void *base,size_t nelem,size_t width, cmp); *base 為要排序的

2、數(shù)組 nelem 為要排序的數(shù)組的長度 width 為數(shù)組元素的大小(一字節(jié)為單位) 簡單示例:對(duì)int num100排序,qsort中各參數(shù)怎么寫? qsort(num,100,sizeof(num0),cmp,4,自定義比較函數(shù),比較函數(shù)的名字是自定義的(這里我們用CMP命名); Cmp:qsort 要求提供的這個(gè)函數(shù)是一個(gè)需要自己定義的比較函數(shù),比較函數(shù)使得qsort通用性更好。有了比較函數(shù)qsort可以實(shí)現(xiàn)對(duì)數(shù)組,字符串,結(jié)構(gòu)體等結(jié)構(gòu)進(jìn)行升序或降序排序。 Int Cmp(const void *a , const void *b )中有兩個(gè)元素作為參數(shù),返回一個(gè)int值, 如果比較函數(shù)

3、返回大于0,qsort就認(rèn)為 ab , 如果比較函數(shù)返回等于0 qsort就認(rèn)為a 和b 這兩個(gè)元素相等,返回小于零 qsort就認(rèn)為 ab),你比較函數(shù)卻返回一個(gè) -1 (小于零的)那么qsort認(rèn)為ab 的,就把 b放到前面去,但實(shí)際上是a大于b的,所以就造成升降序的差別了。 簡單來說,比較函數(shù)的作用就是給qsort指明元素的大小是怎么比較的,5,簡單示例:對(duì)int num100中的元素從小到大排序。 int num100; int cmp ( const void *a , const void *b ) return *(int *)a - *(int *)b; /強(qiáng)制轉(zhuǎn)換類型 qso

4、rt(num,100,sizeof(num0),cmp); Cmp()定義了兩個(gè)const void(類型為空)的指針*a和*b; 在*(int *)a - *(int *)b; 這句中把指針強(qiáng)制轉(zhuǎn)換為 int型; 我們可以將const void 改為你需要排序?qū)ο蟮念愋停?int num100; int cmp ( int *a , int *b ) return *a - *b; qsort(num,100,sizeof(num0),cmp); 如果要對(duì)num100中的元素從大到小排序,只需要將return *a - *b改為 return *b -*a 就可以實(shí)現(xiàn),6,qsort簡單實(shí)例

5、,應(yīng)用qsort對(duì)int數(shù)組進(jìn)行排序: #include #include int cmp_1 ( int *a , int *b ) return *a - *b; int cmp_2 ( int *a , int *b ) return *b - *a; void main() int num10=1,3,5,7,9,2,4,6,8,0; int i; qsort(num,10,sizeof(num0),cmp_1);/從小到大 for(i=0;i10;i+) printf(%d ,numi); printf(n); qsort(num,10,sizeof(num0),cmp_2);/從大

6、到小 for(i=0;i10;i+) printf(%d ,numi); printf(n);,7,應(yīng)用qsort對(duì)char數(shù)組進(jìn)行排序: #include #include int cmp_1 ( char *a , char *b ) return *a - *b; int cmp_2 ( char *a , char *b ) return *b - *a; void main() char ch10=bcadfegihj; int i; qsort(ch,10,sizeof(ch0),cmp_1);/從小到大 for(i=0;i10;i+) printf(%c ,chi); print

7、f(n); qsort(ch,10,sizeof(ch0),cmp_2);/從大到小 for(i=0;i10;i+) printf(%c ,chi); printf(n);,8,應(yīng)用qsort對(duì)結(jié)構(gòu)體一級(jí)排序: #include #include struct coord int x; int y; data100; int cmp(struct coord *a ,struct coord *b) /根據(jù)y的大小排序 return a-y - b-y ; void main() int sum=0,n; int i,j; /freopen(in.txt,r,stdin); while(sca

8、nf(%d, 輸入: 4 0 2 2 1 3 8 6 3 0,9,應(yīng)用qsort對(duì)結(jié)構(gòu)體二級(jí)排序: #include #include struct coord int x; int y; data100; int cmp(struct coord *a ,struct coord *b) if(a-x != b-x) return a-x - b-x; /按照x從小到大排序,當(dāng)x相等時(shí)按照y從大到小排序 else return a-y - b-y ; void main() int sum=0,n; int i,j; freopen(in.txt,r,stdin); while(scanf(%d, 輸入: 5 2 2 2 1 4 3 3 9 4 2 0,10,對(duì)字符串排序(簡單了解): struct In int data; char str100; s100; /按照結(jié)構(gòu)體中字符串str的字典順序排序 int cmp (

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論