圖解Java經典算法快速排序的原理與實現(xiàn)_第1頁
圖解Java經典算法快速排序的原理與實現(xiàn)_第2頁
圖解Java經典算法快速排序的原理與實現(xiàn)_第3頁
圖解Java經典算法快速排序的原理與實現(xiàn)_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第圖解Java經典算法快速排序的原理與實現(xiàn)目錄快速排序算法原理圖解Java代碼實現(xiàn)算法分析

快速排序

通過一趟排序將待排元素分成獨立的兩部分,其中一部分為比基準數小的元素,另一部分則是比基準數大的元素。然后對這兩部分元素再按照前面的算法進行排序,直到每一部分的元素都只剩下一個。

本質上來看,快速排序應該算是在冒泡排序基礎上的遞歸分治法。

算法原理

從數列中挑出一個元素作為基準點重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面然后基準值左右兩邊,重復上述步驟通過遞歸把基準值元素左右兩側的數組排序,排完之后,整個數組就排序完成了

圖解

問題描述:

給定一個無序排列的數組nums,使其能夠按照有序輸出

示例:

輸入:nums=[4,3,1,2,9,6],

輸出:nums=[1,2,3,4,6,9]

圖解如下:

Java代碼實現(xiàn)

核心代碼

publicclassQuickSort{

//比較v是否小于w

publicstaticbooleanless(Comparablev,Comparablew){

returnpareTo(w)

//數組元素交換位置

privatestaticvoidswap(Comparable[]a,inti,intj){

Comparabletemp;

temp=a[i];

a[i]=a[j];

a[j]=temp;

//排序

publicstaticvoidsort(Comparable[]a){

intl=0;

inth=a.length-1;

sort(a,l,h);

privatestaticvoidsort(Comparable[]a,intl,inth){

if(h=l)return;

//對數組進行分組(左右兩個數組)

//i表示分組之后基準值的索引

inti=partition(a,l,h);

//讓左邊的數組有序

sort(a,l,i-1);

//讓有邊的數組有序

sort(a,i+1,h);

publicstaticintpartition(Comparable[]a,intl,inth){

//確定基準值

Comparablekey=a[l];

//定義兩個指針

intleft=l;

intright=h+1;

//切分

while(true){

//從右向左掃描,移動right指針找一個比基準值小的元素,找到就停止

while(less(key,a[--right])){

if(right==l)

break;

//從左向右掃描,移動left指針找一個比基準值大的元素,找到就停止

while(less(a[++left],key)){

if(left==h)

break;

if(left=right){

break;

}else{

swap(a,left,right);

//交換基準值

swap(a,l,right);

returnright;

}

publicclassQuickSortTest{

publicstaticvoidmain(String[]args){

Integer[]arr={3,1,2,4,9,6};

QuickSort.sort(arr);

System.out.println(Arrays.toString(arr));

//排序前:{3,1,2,4,9,6}

//排序后:{1,2,3,4,6,9}

運行結果:

算法分析

時間復雜度

快速排序的最佳情況就是每一次取到的元素都剛好平分整個數組,由于快速排序用到了遞歸調用,因此計算其時間復雜度也需要用到遞歸算法來計算。T[n]=2T[n/2]+f(n);此時時間復雜度是O(nlogn)。最壞的情況,則和冒泡排序一樣,每次比較都需要交換元素,此時時間復雜度是O(n^2)。

因此,快速排序的時間復雜度為:O(nlogn)。

空間復雜度

空間復雜度主要是遞歸造成

溫馨提示

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

評論

0/150

提交評論