快速排序的算法的核心思想是選取一個(gè)中間值,將整個(gè)數(shù)組分為兩個(gè)部分一個(gè)比這個(gè)一半比這個(gè)中間值大,一半比這中間值小。之后將數(shù)組從這個(gè)中間值中分成兩部分,采用分治的方式將左邊的一半排序,再將右邊的一半排序。這里一個(gè)技巧性就是如何遍歷數(shù)組,以及如何交換。
這里有個(gè)非常有技巧性的東西,就是將中間值取出來,并且用它空出來的空位來進(jìn)行交換。
def quickSort2(nums, start, end):
if (start >= end):
return
low, hight = start, end
p = nums[start]
while(start < end):
while(start < end and p <= nums[end]):
end -= 1
nums[start] = nums[end]
while(start < end and p >= nums[start]):
start += 1
nums[end] = nums[start]
nums[start] = p
quickSort2(nums, low, start-1)
quickSort2(nums, start+1, hight)
但是快速排序的算法有一個(gè)問題就是算法的穩(wěn)定性不好
最好情況下的算法復(fù)雜度是
最壞的情況下是