排序演算法5 快速排序

2021-10-25 09:17:29 字數 1230 閱讀 1032

快速排序是對氣泡排序基礎上的優化版本,它打破了氣泡排序只能比對交換相鄰元素的方式,並加入了「分治」思想

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,...