日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qsort与sort()

發(fā)布時(shí)間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qsort与sort() 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
int cmp(const void *a, const void *b) /** 關(guān)于快排函數(shù)的一些說明 **qsort,包含在stdlib.h頭文件里,函數(shù)一共四個(gè)參數(shù),沒返回值.一個(gè)典型的qsort的寫法如下qsort(s,n,sizeof(s[0]),cmp);其中第一個(gè)參數(shù)是參與排序的數(shù)組名(或者也可以理解成開始排序的地址,因?yàn)榭梢詫?amp;s[i] 這樣的表達(dá)式,這個(gè)問題下面有說明); 第二個(gè)參數(shù)是參與排序的元素個(gè)數(shù); 第三個(gè)三數(shù)是 單個(gè)元素的大小,推薦使用sizeof(s[0])這樣的表達(dá)式,下面也有說明 :) ;第四個(gè)參數(shù)就是 很多人覺得非常困惑的比較函數(shù)啦,關(guān)于這個(gè)函數(shù),還要說的比較麻煩...int cmp(const void *a,const void *b);返回值必須是int,兩個(gè)參數(shù)的類型必須都是const void *,那個(gè)a,b是我隨便寫的,個(gè)人喜好. 假設(shè)是對int排序的話,如果是升序,那么就是如果a比b大返回一個(gè)正值,小則負(fù)值,相等返回 0,其他的依次類推,后面有例子來說明對不同的類型如何進(jìn)行排序.在函數(shù)體內(nèi)要對a,b進(jìn)行強(qiáng)制類型轉(zhuǎn)換后才能得到正確的返回值,** 關(guān)于快排的一些小問題 **1.快排是不穩(wěn)定的,這個(gè)不穩(wěn)定一個(gè)表現(xiàn)在其使用的時(shí)間是不確定的,最好情況(O(n))和最 壞情況(O(n^2))差距太大,我們一般說的O(nlog(n))都是指的是其平均時(shí)間.2.快排是不穩(wěn)定的,這個(gè)不穩(wěn)定表現(xiàn)在如果相同的比較元素,可能順序不一樣,假設(shè)我們有 這樣一個(gè)序列,3,3,3,但是這三個(gè)3是有區(qū)別的,我們標(biāo)記為3a,3b,3c,快排后的結(jié)果不一定 就是3a,3b,3c這樣的排列,所以在某些特定場合我們要用結(jié)構(gòu)體來使其穩(wěn)定(No.6的例子就 是說明這個(gè)問題的)5.如果要對數(shù)組進(jìn)行部分排序,比如對一個(gè)s[n]的數(shù)組排列其從s[i]開始的m個(gè)元素,只需要 在第一個(gè)和第二個(gè)參數(shù)上進(jìn)行一些修改:qsort(&s[i],m,sizeof(s[i]),cmp); */ //int型 int qcmp(const void*a,const void *b) {return *(int *)a-*(int *)b;//升序排列。//return *(int *)b-*(int *)a;降序排列 } //char int qcmp(const void *a,const void *b) {return(*(char *)a-*(char *)b);//升序 } //char [][] int qcmp(const void *a,const void *b) {return(strcmp((char*)a,(char*)b));//升序 } //double型 int qcmp(const void *a,const void *b) {return *(double*)a > *(double*)b ? 1:-1;//升序//返回值的問題,顯然qcmp返回的是一個(gè)整型,所以避免double返回小數(shù)而被丟失,用一個(gè)判斷返回值。 } //struct型 struct node {int num;int index; }; int qcmp(const node &a,const node &b) {switch(mode)//都是升序{case 1:return a.num-b.num;case 2:return a.index-b.index;} }//sort排序 bool compare(int a,int b) {return a>b; //降序排列,如果改為return a<b,則為升序 } //同是降序,sort的comp函數(shù)是a>b而qsort的函數(shù)是return b-a;

總結(jié)

以上是生活随笔為你收集整理的qsort与sort()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。