版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、sort。函數(shù)是C+中的排序函數(shù)其頭文件為:#mclude頭文件;qsort()是C中的排序函數(shù),其頭文件為:#iiiclude1、qsort()六類qsort排序方法qsort函數(shù)很好用,但有時不太會用比如按結(jié)構(gòu)體一級排序、二級排序、字符串排序等。函數(shù)原型:voidqsort(void*base,size_tnelem,size_twidth,int(*fcmp)(constvoid*,constvoid*)輸入?yún)?shù):Base:待排序的數(shù)組nelem:數(shù)組元數(shù)的個數(shù)(長度)width:每一個元素所占存儲空間的大小fcmp:用于對數(shù)組元素進(jìn)行比較的函數(shù)的指針(該函數(shù)是要自己寫的),返回值為1或
2、-1(plp2則返回-1,pl*(Element_type*)p1)?1:-1;mtElemenCelistMAX;lnitial(list);/這是對數(shù)組listmax初始化qsort(list,sizeof(list),sizeof(Element_type),Comp);/調(diào)用函數(shù)qsortreturn0;對字符串排序:mtComp(constvoid*pl,constvoid*p2)returnstrcmp(chai*)p2,(charmtcliaiaMAXlMAX2;initial(a);qsort(a,lentil,sizeof(a0),Comp);/lenth為數(shù)組a的長度按結(jié)構(gòu)
3、體中某個關(guān)鍵字排序(對結(jié)構(gòu)體一級排序:stmctNodedoubledata;intother;s100;mtComp(constvoid*pl,constvoid*p2)return(*(Node*)p2)-data(*(Node*)pl)-data?1:-1;qsort(s,100,sizeof(s0),Comp);按結(jié)構(gòu)體中多個關(guān)鍵字排序(對結(jié)構(gòu)體多級排序)以二級為例:stmctNodeintx;intv;s100;按照x從小到人排序,當(dāng)x相等時按y從人到小排序(這是3跟4的區(qū)別)mtComp(constvoid*pl,constvoid*p2)stmctNode*c=(Node*)pl
4、;stmctNode*d=(Node*)p2;if(c-x!=d-x)returnc-x-d-x;elsereturnd-v-c-y;對結(jié)構(gòu)體中字符串進(jìn)行排序:stmctNodeintdata;chaistr100;s100;按照結(jié)構(gòu)體中字符串str的字典序排序mtComp(constvoid*pl,constvoid*p2)retuinstrcmp(*(Node*)pl).sti(*(Node*)p2).str);qsort(s,100,sizeof(s0,Comp);計算幾何中求凸包的CompmtComp(constvoid*pl,constvoid*p2)重點Comp函數(shù),把除了1點外的
5、所有的點旋轉(zhuǎn)角度排序stmctpomt*c=(pomt*)pl;stmctpoint*d=(pomt*)p2;if(cacl(*c,*d,pl)%dy,plx,ply)如果在一條直線上,則把遠(yuǎn)的放在前面return1;elsereturn-1;2、sort()son對給定區(qū)間所有元素進(jìn)行排序stable_son對給定區(qū)間所有元素進(jìn)行穩(wěn)定排序panial_soil對給定區(qū)間所有元素部分排序partial_soit_copy對給定區(qū)間復(fù)制并排序nth.element找出給定區(qū)間的某個位置對應(yīng)的元素is_sorted判斷一個區(qū)間是否已經(jīng)排好序panition使得符合某個條件的元素放在前面stable
6、_panition相對穩(wěn)定的使得符合某個條件的元素放在前面語法描述為:sort(begin,end),表示一個范圍,例如:mt_tmain(iiitaigc,_TCHAR*argv)inta20=2,4,l,23,5,76,0,43,24,65,i;fbr(i=0;i20;i-H-)coutaiendl;sort(a,a+20);fbr(i=0;i20;i-H-)coutaiendl;retuni0;輸出結(jié)果將是把數(shù)組a按升序排序,說到這里可能就有人會問怎么樣用它降序排列呢?這就是下一個討論的內(nèi)容。sort(begm,end,compare)一種是自己編寫一個比較函數(shù)來實現(xiàn),接著調(diào)用三個參數(shù)的
7、sort:sort(begin,end,compare)就成了。對于list容器,這個方法也適用,把compare作為sort的參數(shù)就可以了,即:sort(compare)。自己編寫compare函數(shù):boolconipare(intajntb)returnab,則為降序iiitaigc,_TCHAR*argv)inta20=2,4,1,23,5,76,0,43,24,65,i;fbi(i=0;i20;i+)coutaiendl;sort(a.a+20,compaie);fbr(i=0;i20;i+)coutaiendl:return0;更進(jìn)一步,讓這種操作更加能適應(yīng)變化。也就是說,能給比較函
8、數(shù)一個參數(shù),用來指示是按升序還是按降序排,這回輪到函數(shù)對象出場了。為了描述方便,我先定義一個枚舉類型EnumComp用來表示升序和降序。很簡單:enumEnumcompASC,DESC;然后開始用一個類來描述這個函數(shù)對彖。它會根據(jù)它的參數(shù)來決定是采用還是classcompareprivate:Enumcompcomp;public:compare(Enumcompc):comp(c);booloperator()(mtnumljntnuni2)switch(comp)caseASC:returnnum1nuni2;接卜來使用sort(beguhend,compare(ASC)實現(xiàn)升序,sort
9、(begin,end,compare(DESC)實現(xiàn)降序。主函數(shù)為:iiitmam()inta20=2,4,1,23,5,76,0,43,24,65);foi(i=0;i20;i+)coutaiendl;sort(a.a+20,compaie(DESC);foi(i=0;i20;i+)coutaiendl;return0;其實對于這么簡單的任務(wù)(類型支持“”、“”等比較運算符),完全沒必要自己寫一個類出來。標(biāo)準(zhǔn)庫里已經(jīng)有現(xiàn)成的了,就在fiinctional里,include進(jìn)來就行了。fiinctional提供了一堆基于模板的比較函數(shù)對彖。它們是(看名字就知道意思了):equal_to.not
10、_equal_togreatergieater_equalsless、less_equalo對于這個問題來說,gwa血和less就足夠了,直接拿過來用:升序:sort(begm.enddess();降序:sort(begm.end,greater().mtaigc,_TCHAR*argv)inta20F2,4,1,23,5,76,0,43,24,65);foi(i=0;i20;i+)coutaiendl;sort(a.a+20,greater();foi(i=0;i20;i+)coutaiendl;return0;既然有迭代器,如果是stnng就可以使用反向迭代器來完成逆序排列,程序如下:mt
11、mam()stringstr(McvicsesH);strings(str.rbeginO,str.rendO);coutsendl;return0;這是我在百度上找到的1011題的答案,我覺得用它來說明sort。函數(shù)最具有代表性#include#include#include#includeusingnamespacestd;intstick100,n;boolused100;/unused:沒有使用的棍子的數(shù)目/left:剩下的長度len:當(dāng)前認(rèn)為的計算的長度booldfs(mtunused,intleft,intlen)/所有的棍子已經(jīng)用了,且沒有剩余的長度,符合搜索條件if(unuse
12、d=0&hft=0)returntine;inti;沒有剩下的則新開一條棍子if(left=0)left=len;尋找沒有使用過的棍子for(i=0;in;+i)找到?jīng)]有用過的,而且長度比left值要小(能夠填進(jìn)去)if(!used&stick=left)/使用當(dāng)前棍子used=tme;若在當(dāng)前情況下能夠擴(kuò)展出正確答案,則返回if(dfs(unused-l,left-stick,len)成功搜索,返回returntine;否則不使用當(dāng)前的棍子used=false;若使用stick不能擴(kuò)展出正確結(jié)果,那么如果stick與left等長,則證明len不可能是正確答案若left與len等長,就是沒有辦法擴(kuò)展if(stick=left|left=len)break;/經(jīng)過一輪搜索仍得不到正確答案,則返回falsereturnfalse;mtmam()inti,sum;while(scanf(n%dM,&n)!=EOF&n)sum=0;for
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色倉儲倉房買賣合同范本環(huán)保解讀3篇
- 2025年度旅游單項服務(wù)保障合同4篇
- 2024-2025學(xué)年高中英語Unit4Breakingboundaries突破語法大沖關(guān)教師用書外研版選擇性必修第二冊
- 2024-2025學(xué)年新教材高中歷史第八單元20世紀(jì)下半葉世界的新變化第18課冷戰(zhàn)與國際格局的演變課時作業(yè)含解析新人教版必修中外歷史綱要下
- 二零二五版工程招投標(biāo)與合同管理法律法規(guī)匯編及解讀3篇
- 2024版汽車維修工具套件租賃合同
- 2024版廣西事業(yè)單位聘用合同樣板
- 2025年屋頂雨水排水管及配套設(shè)施銷售與安裝服務(wù)合同2篇
- 二零二五年度教育合作辦班合同范本3篇
- 2024版汽車修理廠土地租賃合同
- 2023年上海英語高考卷及答案完整版
- 西北農(nóng)林科技大學(xué)高等數(shù)學(xué)期末考試試卷(含答案)
- 金紅葉紙業(yè)簡介-2 -紙品及產(chǎn)品知識
- 《連鎖經(jīng)營管理》課程教學(xué)大綱
- 《畢淑敏文集》電子書
- 頸椎JOA評分 表格
- 員工崗位能力評價標(biāo)準(zhǔn)
- 定量分析方法-課件
- 朱曦編著設(shè)計形態(tài)知識點
- 110kV變電站工程預(yù)算1
- 某系統(tǒng)安全安全保護(hù)設(shè)施設(shè)計實施方案
評論
0/150
提交評論