排序演算法五 快速排序

2021-10-22 14:47:41 字數 1239 閱讀 5979

取陣列最中間的那個數為基數(取哪乙個數為基數都可以,取中間的只是為了好理解),在左邊找乙個比基數大的數,在右邊找乙個比基數小的數,如果找到就交換兩個數的位置,交換過後再向下尋找,直到左邊的角標大於等於右邊則退出,一輪排序後,基數的左邊一定都是比基數小的,基數的右邊一定是比基數大的,(注意:基數不一定還在原來的位置,可能出現在基數左邊找不到比基數大的數,故而左邊找到的數只能是基數本身,而右邊找到的數小於基數,此時,仍會發生交換,交換過後,右邊的數就是基數本身,然後左邊的角標+1,再比較左邊的數是否大於基數,大於就交換,以此迴圈),然後遞迴基數左邊的所有元素(角標從left — r)結束後遞迴基數右邊所有元素(角標 l — right)

public

static

void

quicksort

(int

arr,

int left,

int right)

while

(arr[r]

> pivot)

if(l >= r)

temp = arr[l]

; arr[l]

= arr[r]

; arr[r]

= temp;

if(arr[l]

== pivot)

if(arr[r]

== pivot)}if

(l == r)

if(left < r)

if(right > l)

}

效率更高的一種快排

public

static

void

quicksort2

(int

arr,

int left,

int right)

}private

static

intpartition

(int

arr,

int left,

int right)

arr[left]

=arr[right]

;while

(left<=key)

arr[right]

=arr[left];}

arr[left]

=key;

return left;

}

排序演算法(五) 快速排序

在陣列中選取乙個數作為基準值,進行乙個partition過程,將小於該數的放在左邊,大於的放在右邊,等於的放在中間,再對左右分別進行該操作。時間複雜度 每次partition可以將乙個數字位置確定,將陣列劃分為兩部分,因此想要有序,理想情況每次剛好兩邊大小一樣,則一共需要logn次partition...

排序演算法(五) 快速排序

快速排序是一種效率很高的排序演算法,也是我們使用最多的一種排序演算法。快速排序原理 兩個指標分別指向陣列兩頭元素,將陣列第乙個元素儲存下來,作為基準數,兩個指標開始向中間移動,先移動陣列尾部指標,直到發現所指元素比基準數小時,將這時候所指向的數賦值給陣列頭部指標指向的位置,然後尾部指標停止移動,頭部...

排序演算法總結(五)快速排序

快速排序的思想是選取待排陣列中的乙個數作為中間數 一般是第乙個數 然後將陣列中數與這個中間數進行比較,使中間數左邊的數都小於中間數,中間數右邊的數都大於中間數,這樣中間數就在正確的位置上,然後將左右兩部分再次進行相同的操作,最終會得到乙個有序的陣列。快速排序的演算法平均時間複雜度為o nlogn 最...