快速排序的理解和Java的實現

2021-09-24 15:10:58 字數 1142 閱讀 1394

最近在面試題中經常看到說要手寫乙個快排,但是好久不接觸都有些生疏,今天又複習了一遍

個人對於快速排序的理解是,通過設定乙個基準數,找到這個基準數的在整個陣列中適合的位置,即基準數的左邊都小於這個基準數,基準數的右邊都大於這個基準數。

在這個時候,基準數左邊和右邊並不是有效的排序,只是統一的都大於或小於基準數,然後我們就可以更換基準數,然後通過遞迴的方式直接把這個陣列進行有效的排序

借用一張看到的別的大佬發的圖qwq:

(i//回到左邊遞減

while

(arry[i]

<=base&&i

//如果這兩種情況都出現了,則會進行到這裡,就把兩個數交換

int t=arry[j]

; arry[j]

=arry[i]

; arry[i]

=t;}

//然後跳出這個迴圈,把base的值更新,這裡就相當於乙個arry[left]和arry[i]的交換

arry[left]

=arry[i]

; arry[i]

=base;

//遞迴呼叫

quicksort

(arry,left,i-1)

;quicksort

(arry,j+

1,right);}

}

快速排序的Java實現

之前整理過乙份學習筆記放到了部落格上,但是演算法是借用了他人的成果,是看了網上多篇文章之後又寫出來的。寫完的時候還遇到一點小問題,最終的糾正方式也是參考網路文章。今天再次整理一下相關的內容,主要是針對自己曾經有一點迷惑的地方進行思考總結。之前的 packagequicksortpack public...

快速排序的java實現

快排原理 在要排的數 比如陣列a 中選擇乙個中心值key 比如a 0 通過一趟排序將陣列a分成兩部分,其中以key為中心,key右邊都比key大,key左邊的都key小,然後對這兩部分分別重複這個過程,直到整個有序。整個快排的過程就簡化為了一趟排序的過程,然後遞迴呼叫就行了。一趟排序的方法 1,定義...

快速排序的Java實現

思路 以乙個數為基準數 一般為頭數或者尾數 再定義頭尾兩個游標,頭游標依次往右移並進行判斷是否比基準數小直至遇到比基準數大的數 尾游標依次往左移並進行判斷是否比基準數大直至遇到比基準數小的數。接著將兩個游標所在的數進行swap交換操作。迴圈判斷並進行swap操作,直至left上述1,2完成一次遞迴,...