版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、快速排序算法快速排序就是 遞歸調(diào)用此過程一一在以49為中點分割這個數(shù)據(jù)序列, 分別對前面一部 分和后面一部分進行類似的快速排序,從而完成全部數(shù)據(jù)序列的快速排序, 最后把此數(shù)據(jù)序列變成一個有序的序列,根據(jù)這種思想對于上述數(shù)組A的快速排序的全過程如圖 6所示:初始狀態(tài)49 38 65 97 76 13 27進行一次快速排序之后劃分為27 38 13 49 7697 65分別對前后兩部分進行快速排序27 38 13經(jīng)第三步和第四步交換后變成13 2738完成排序。76 97 65經(jīng)第三步和第四步交換后變成65 76 97完成排序。運行結果:27 38 13 49 76 97 6513 27 38 4
2、9 76 97 6513 27 38 49 65 76 97if(left =已經(jīng)整理完成一個組了*/第一輪函數(shù)調(diào)用的詳細過程:i =0j=6 Key=49第一輪循環(huán)i=0j=627 38 65 97 76 13 27j=627 38 65 97 76 13 65i=2第二輪循環(huán)i=2j=627 38 13 97 76 13 65j=527 38 13 97 76 97 65i=3第三輪循環(huán)i=3j=527 38 13 97 76 97 65j=3循環(huán)結束:i=3j=3ai= key 27 38 13 49 76 97 65C語言版本1 voidsort(i nt*a,int left,int
3、right)49 38 65 97 76 13 2723right)/*如果左邊索引大于或者等于右邊的索引就代表return1011121314 intintintleft;j = right; key = aleft;while(i j)內(nèi)尋找一遍*/*控制在當組& key =aj)1,找到一個小于或者大于key的數(shù)(大于或沒有符合條件1的,并且i與j的大小沒有反15while(i j/*而尋找結束的條件就是: 小于取決于你想升序還是降序)2,轉*/1920j-;/*向前尋找*/2122ai=aj;23/*找到一個這樣的數(shù)后就把它賦給前面的被拿走的i的值(如2425果第次循環(huán)且key是ale
4、ft,那么就是給key)*/26while(i-ai)27/*這是i在當組內(nèi)向前尋找,冋上,不過注意與key的大小關r r. rr.r-i-t r.t-t r r e、乙 /、 n-、t m-r廠廠 r r F . # 、rr*、t 丄 W rr28系停止循環(huán)和上面相反,因為排丿予思想足把數(shù)仕兩邊扔,所以左右兩邊的數(shù)大小29與key的關系相反*/3031i+;3233aj-ai;343536ai=key;/*當在當組內(nèi)找完一遍以后就把中間數(shù)key回歸*/37sort(a,left,i -1);/*最后用冋樣的方式對分出來的左邊的小38組進行同上的做法*/sort(a,i +1, right);
5、/*用冋樣的方式對分出來的右邊的小組進行同上的做法*/*當然最后可能會出現(xiàn)很多分左右,直到每一組的i - j 為止*/C+語言12#i nclude34us ingn amespace std;5voidQsort(i nta,int low, int high)67if(low=high)89return;1011int first=low;12int last =high;1314int key-afirst;/*用子表的第一個記錄作為樞軸 */15while(firstlast)1617while(first=key)1819-last;202122afirst- alast;/*將比第
6、一個小的移到低端*/2324while(first last &afirst=key)2526+first;272829alast= afirst;30/*將比第一個大的移到高端 */3132afirst=key;/*樞軸記錄到位*/33Qsort(a,low, first-1);34Qsort(a,first+1,high);3536int mai n()3738int a=57,68,59,52,72,28,96,33,24;3940Qsort(a,0, sizeof(a)/ sizeof(a0)-1);/*這里原文第三41個參數(shù)要減1否則內(nèi)存越界*/4243for(i nti = 0;
7、i sizeof(a)/sizeof(a0);i+)4445cout ai ;464748return0;/*參考數(shù)據(jù)結構p274(清華大學出版社,嚴蔚敏)*/Java1classQuick23publicvoidsort(i ntarr,i ntlow,i nthigh)45intl=low;6inth=high;7intpovit=arrlow;9101112131415161718192021222324252627282930313233343536373839404142434445464748495051while(lvh)whlle(l=povit)h-;if(lh)int te
8、mp=arrh;arrh=a rrl;arrl=temp;l+;while(lh &arrl=povit)l+;if(llow)sort(arr,low,l-1);if(hhigh)sort(arr,l+1,high);/*/方式二 /*/更高效點的代碼:publicTexte ndsComparableTquickSort(TtargetArr,i ntstart,i nten d)in ti=start+1,j=e nd;Tkey=targetArrstart;SortUtilsUtil=newSortUtil();if(start=e nd)return(targetArr);/*從i+
9、和j-兩個方向搜索不滿足條件的值并交換*條件為:i+方向小于key, j-方向大于key*/while(true) while(targetApareTo(key)0)j-; while(targetApareTo(key) 0&i =j)break;sUtil.swap(targetArr,i,j);if(targetArri=key)j-;elsei+;/*關鍵數(shù)據(jù)放到中間*/sUtil.swap(targetArr,start,j);if(starti-1)this.quickSort(targetArr,start,i-1);if(j+1e nd)this.
10、quickSort(targetArr,j+1,e nd);returntargetArr;/*/*/*/方式三:減少交換次數(shù),提高效率privateTexte ndsComparable voidquickSort(TtargetArr,i ntstart,i ntend)in ti=start,j=e nd;Tkey=targetArrstart;while(i i&targetApareTo(key)=0)9596j;9798991001011021031041051061071081091101111121131141151161171181191201211221231
11、24125126127C#123456if(ij)/*targetArri已經(jīng)保存在key中,可將后面的數(shù)填入 */targetArri=targetArrj;i+;/*按i+方向遍歷目標數(shù)組,直到比 key大的值為止*/while(ij&targetApareTo(key)=0)/*此處一定要小于等于零,假設數(shù)組之內(nèi)有一億個1, 0交替出現(xiàn)的話,而 key的值又恰巧是1的話,那么這個小于等于的作用就會使下面的if語句少執(zhí)行一億次。*/i+;if(ij)/*targetArrj已保存在targetArri中,可將前面的值填入*/targetArrj=targetArri;j-;/
12、* 此時 i=j*/targetArri=key;/*遞歸調(diào)用,把key前面的完成排序*/this.quickSort(targetArr,start,i-1);/*遞歸調(diào)用,把key后面的完成排序*/this.quickSort(targetArr,j+1,e nd);using System;usingSystem.Collecti on s.Ge neric;using System.L inq;using System.Text;namespace testclass Quicksort9101112131415161718192021222324252627282930static
13、void Main(string args)int array =49,38,65,97,76,13,27;sort(array, 0,array.Le ngth-1);Con sole.ReadL in e();/* 一次排序單元,完成此方法,key左邊都比key小,key右邊都比key 大。*param array 排序數(shù)組*param low排序起始位置*param high排序結束位置*return單元排序后的數(shù)組*/private static intsort Un it(i ntarray, int low, inthigh)int key = arraylow;while (lo
14、w = key & high l ow)-high;/*比key小的放左邊*/arraylow = arrayhigh;/*從前向后搜索比key大的值,比key大的放右邊*/while (arraylow lo w)+low;/*比key大的放右邊*/arrayhigh = arraylow;/*左邊都比key小,右邊都比key大。/將key放在游標當前位置。/此時low等于high */arraylow = key; foreach (int i in array) Co nsole.Write(0t,i);Co nsole.WriteLi ne();retur nhigh;3132333435363738394041424344454647484950515/*快速排序*paramarry*return */gh)public st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年統(tǒng)編版七年級歷史下冊階段測試試卷含答案
- 2025年粵教滬科版七年級物理下冊階段測試試卷
- 二零二五版泥漿外運承包服務合同(含環(huán)保驗收標準)4篇
- 二零二五版門衛(wèi)值班人員節(jié)假日值班合同4篇
- 塔吊工地施工環(huán)保監(jiān)測合同20252篇
- 二零二五年度影視配音拍攝合同范本3篇
- 二零二五版智能門窗系統(tǒng)研發(fā)與市場推廣服務合同2篇
- 二零二五年度美團外賣外賣配送服務區(qū)域規(guī)劃及調(diào)整合同4篇
- 二零二五版牛肉連鎖超市配送服務合同樣本4篇
- 臨時教學輔助人員聘用合同2024校版版
- 2024年甘肅省武威市、嘉峪關市、臨夏州中考英語真題
- DL-T573-2021電力變壓器檢修導則
- 繪本《圖書館獅子》原文
- 安全使用公共WiFi網(wǎng)絡的方法
- 2023年管理學原理考試題庫附答案
- 【可行性報告】2023年電動自行車相關項目可行性研究報告
- 歐洲食品與飲料行業(yè)數(shù)據(jù)與趨勢
- 放療科室規(guī)章制度(二篇)
- 中高職貫通培養(yǎng)三二分段(中職階段)新能源汽車檢測與維修專業(yè)課程體系
- 浙江省安全員C證考試題庫及答案(推薦)
- 目視講義.的知識
評論
0/150
提交評論