快速排序是對氣泡排序基礎上的優化版本,它打破了氣泡排序只能比對交換相鄰元素的方式,並加入了「分治」思想
1、對一串行,選定最左邊的元素作為基數p;再定義i,使i依次從左到右尋找比基數p大的元素;再定義j,使j依次從右到左尋找比基數p小的元素;當i、j每每找到,便交換i、j元素,直到i、j相遇
2、將i、j相遇位置的元素與基數p所在元素進行交換,便得到元素p的左邊都比p小,右邊都比p大
3、對元素p的左邊序列和右邊序列重複走流程1、流程2,直到演算法結束
/**
* 快速排序
*/public
class
quicksort
;sort
(arr,
0, arr.length -1)
; system.out.
println
(arrays.
tostring
(arr));
}public
static
void
sort
(int
arr,
int l,
int r)
}public
static
intpatition
(int
arr,
int l,
int r)
// 依次從左往右找大於基數的數
while
(arr[i]
<= p && j > i)
// 找到後交換兩個數
swap
(arr, i, j);}
// 使劃分好的數分布在基數兩側
swap
(arr, l, i)
;return i;
}public
static
void
swap
(int
arr,
int i,
int j)
}
在最優的情況下,快速排序演算法的時間複雜度為o(nlogn)
在最壞的情況下,快速排序演算法的時間複雜度為o(n^2)
平均時間複雜度為o(nlogn)
在最優的情況下,快速排序演算法的空間複雜度為o(logn)
在最壞的情況下,快速排序演算法的空間複雜度為o(n)
平均空間複雜度為o(logn)
元素的比較和交換是跳躍進行的,因此,快速排序是一種不穩定的排序方法
排序演算法5 快速排序
1.什麼是快速排序 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 nlogn 次比較。在最壞狀況下則需要 n 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 nlogn 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效 率地...
排序演算法5之快速排序
快速排序可以分解為三步 尋找基準數,比較通常就是選擇待排序的首專案或者中間專案 2.根據與基準數的大小關係,將待排序陣列分成兩個子串行 和。其中 均小於基準數,均大於基準數,這樣基準數的位置就確定了在q處。然後利用遞迴對兩個子串行進行排序。下圖是對步驟2的介紹,只是該圖是將基準元素設定為最後乙個元素...
排序演算法之快速排序 5
找到乙個比標準數小的 array low array high 如果左邊的數比標準數大,則low右移一位 while low high stand array low 找到乙個比標準數大的 array high array low 將標準數替換掉重合的數 array low stand 2,1,3,...