版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
快速排序基本思想超詳細一看就懂快速排序算法是一種非常高效的排序算法,它采用“分而治之”的思想,將大的拆分為小的,小的拆分為更小的。如果說,希爾排序是直接插入排序的升級(插入類),堆排序是簡單選擇排序的升級(選擇類),那么快速排序等于前面我們認為最慢的冒泡排序的升級(交換類)。快速排序算法是圖靈獲獎?wù)逿ony
Hoare
設(shè)計出來的,他在形式化方法理論以及ALGOL60編程語言發(fā)明中有卓越的貢獻,是上世紀(jì)最偉大的計算機科學(xué)家之一。而快速排序算法只是他眾多貢獻中的一個小發(fā)明而已。其原理如下:對于一組給定的記錄,通過一趟排序后,將原序列分為兩部分,其中前一部分的記錄均比后一部分的所有記錄小(有序);然后再依次對前后兩部分的記錄進行快速排序,遞歸該過程,直到序列的所有記錄均有序為止。圖解快排算法思想結(jié)合圖例,快速排序的算法步驟大致如下:1、我們有一個數(shù)組:[2,1,7,9,5,8]2、分割1:按照快速排序的思想,首先把數(shù)組篩選成較小和較大的兩個子數(shù)組。選擇基準(zhǔn)值7,將原數(shù)組分割為兩個子數(shù)組:[2,1,5]和[7,9,8]3、分割2:針對兩個子數(shù)組:[2,1,5]和[7,9,8],在較小的子數(shù)組里選2作為基準(zhǔn)值,在較大的子數(shù)組里選8作為基準(zhǔn)值,繼續(xù)分割子數(shù)組。基準(zhǔn)值2,[2,1,5]分割為:[1]和[2,5]基準(zhǔn)值8,[9,8]分割為:[8]和[9]4、分割3:繼續(xù)將元素個數(shù)大于1的子數(shù)組進行劃分,當(dāng)所有子數(shù)組里的元素個數(shù)都為1的時候,原始數(shù)組也被排好序了?;鶞?zhǔn)值2,[2,5]分割為:[2]和[5]基準(zhǔn)值8,[9,8]分割為:[8]和[9]5、分割結(jié)果,所有子數(shù)組的元素個數(shù)都為1,得到結(jié)果數(shù)組:我們從上面可以總結(jié)出規(guī)律,在實行分治過程中,如何選擇基準(zhǔn)值并拆分數(shù)組是難點。拆分算法是整個快速排序中的核心,快速排序擁有非常多的拆分方式,其中廣泛使用的是單指針遍歷法與雙指針遍歷法。篇幅所限,我們這里對面試常常問的雙指針遍歷算法進行圖解剖析??焖倥判蛩惴ㄖp指針遍歷實現(xiàn)圖解快速排序算法之雙指針遍歷實現(xiàn)圖解:1、首先,我們得到一個初始數(shù)組:[2,1,7,9,5,8]2、進行第1次樞軸挑選,得到樞軸元素下標(biāo)=13、根據(jù)第1次樞軸挑選結(jié)果,進行遞歸處理4、遞歸1:左邊數(shù)組5、遞歸1:右邊數(shù)組6、進行第2次樞軸挑選,得到樞軸元素下標(biāo)=37、根據(jù)第2次樞軸挑選結(jié)果,進行遞歸處理8、遞歸2:右邊數(shù)組9、遞歸2:左邊數(shù)組10、進行第3次樞軸挑選,得到樞軸元素下標(biāo)=511、此時,我們完成對數(shù)組的快速排序,得到順序數(shù)組輸出:[1,2,5,7,8,9]快速排序算法之雙指針遍歷實現(xiàn)代碼下面是快速排序的算法實現(xiàn):publicclassQuickSort{publicstaticvoidmain(String[]args){int[]array={2,1,7,9,5,8};QSort(array,0,5);System.out.println(Arrays.toString(array));}
privatestaticvoidQSort(int[]nums,intlow,inthigh){intpivot;if(low>=high){return;}//難點也是核心,partition函數(shù)工作內(nèi)容:選取某個中樞元素(樞軸,pivot),然后想辦法將它放到某一位置,//使得它左邊的值都小于它,右邊的值都大于它。pivot=partition(nums,low,high);//分解為更小的問題,遞歸QSort(nums,low,pivot-1);QSort(nums,pivot+1,high);}
/***<p>*1、交換順序表nums的記錄,使得樞軸到位,并返回所在位置*2、確保樞軸左邊元素<樞軸,樞軸右邊元素>樞軸*3、選取樞軸策略就是元素的中位數(shù)的下標(biāo)。*/privatestaticintpartition(int[]nums,intlow,inthigh){intpivotKey=nums[low];while(low<high){while(low<high&&nums[high]>=pivotKey){//findouttheelementwhichissmallerthenpivotKeyhigh--;}
//一次遍歷,找到比基準(zhǔn)值更小的元素并排序到前面swap(nums,low,high);while(low<high&&nums[low]<=pivotKey){//findouttheelementwhichisbiggerthenpivotKeylow++;}
//一次遍歷,找到比基準(zhǔn)值更大的元素并排序到后面swap(nums,low,high);}returnlow;}
staticvoidswap(int[]nums,inti,intj){inttmp=nums[i];nums[i]=nums[j];nums[j]=tmp;}}輸出:[1,2,5,7,8,9]快排復(fù)雜度分析我們來分析下快速排序算法的性能:快速排序的時間復(fù)雜度取決于快速排序遞歸的深度,在最優(yōu)情況下,快速排序算法的時間復(fù)雜度為O(nlogn)。在最壞情況下,待排序序列為正序或者逆序,每次劃分只得到一個比上次少一個記錄的子序列(另一個為空),最終時間復(fù)雜度為O(n^2)。由數(shù)學(xué)歸納法,其數(shù)量級為O(nlogn)??焖倥判虻目臻g復(fù)雜度主要是遞歸造成的??臻g的使用,最好情況,遞歸樹的深度為logn,那么它的空間復(fù)雜度也是O(logn)。最壞情況,要進行n-1次遞歸調(diào)用,那么空間復(fù)雜度就是O(n)。平均情況,空間復(fù)雜度為O(logn)。由于關(guān)鍵字的比較和交換是跳躍進行的,因此快速排序是不穩(wěn)定的排序方法??偨Y(jié)
遞歸排序算法,還是有不少值得優(yōu)化的地方:1、優(yōu)化選取樞軸:采用三數(shù)取中法(median-of-three),即取是哪個關(guān)鍵字先進行排序,將中間數(shù)作為樞軸,一般使用左端、右端和中間三個數(shù),或者隨機選取?;蛘卟捎镁艛?shù)取中(medina-of-nine),從數(shù)組中三次取樣每次三個,基于樣品取中數(shù),然后從三個中數(shù)再取中數(shù)作為樞軸。2、優(yōu)化不必要的交換3、優(yōu)化小數(shù)組時的排序方案如果
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 互聯(lián)網(wǎng)服務(wù)備案管理規(guī)則
- 猶太教堂防水施工墻面協(xié)議
- 研發(fā)經(jīng)理解除聘用合同分析
- 圖書館環(huán)境衛(wèi)生工招聘合同
- 2024年網(wǎng)絡(luò)游戲運營合同范本
- 2024年物聯(lián)網(wǎng)技術(shù)應(yīng)用開發(fā)與合作合同
- 地下排水樁基夯擴樁施工合同
- 2025年酒水新品研發(fā)與技術(shù)合作合同2篇
- 2025版智能家居系統(tǒng)解決方案供貨與安裝合同
- 2024年瑜伽館學(xué)員培訓(xùn)協(xié)議3篇
- 腦卒中偏癱患者早期康復(fù)護理現(xiàn)狀(一)
- 模特的基礎(chǔ)訓(xùn)練
- 急救技術(shù)-洗胃術(shù) (2)
- 藥品招商流程
- 混凝土配合比檢測報告
- 100道遞等式計算(能巧算得要巧算)
- 【2019年整理】園林景觀設(shè)計費取費標(biāo)準(zhǔn)
- 完整word版,ETS5使用教程
- 《血流動力學(xué)監(jiān)測》PPT課件.ppt
- 2018年秋季人教版十一冊數(shù)學(xué)第7、8單元測試卷
- 學(xué)生作業(yè)提交與批閱系統(tǒng)的設(shè)計與實現(xiàn)探討
評論
0/150
提交評論