排序 快排的兩種寫法

2021-10-05 19:25:13 字數 1135 閱讀 7409

之前的部落格記錄過各種排序

快排演算法**如下,該方法思路很直接也很清晰,但是在生成left和right時會需要新的空間,所以其空間複雜度要高一些。

def

quick_sort

(li):if

len(li)

<2:

return li

tmp = li[0]

#快排中將序列分為左右的值

left =

[x for x in li if x < tmp]

middle =

[x for x in li if x == tmp]

right=

[x for x in li if x > tmp]

return quick_sort(left)

+ middle + quick_sort(right)

上面方式實現的快速排序所需要的空間複雜度會高,在面試時手撕快排時,面試官讓換一種方法寫,也就是不斷原地互動從而達到排序效果。

def

quick_sort

(li, first, last)

:if first >= last:

return

mid_value = li[first]

low = first

high = last

while low < high:

while low < high and li[high]

>= mid_value :

high -=

1 li[low]

= li[high]

while low < high and li[low]

<= mid_value :

low +=

1 li[high]

= li[low]

li[low]

= mid_value #此時退出迴圈,low和high重合

quick_sort(li, first, low-1)

#這裡不能用切片,因為切片就產生了新的list,並不會在原list上排序

quick_sort(li, low+

1, last)

return li

快排的兩種寫法

快速排序,原理很簡單就是在資料找乙個定點數,把小於這個數的數放到其左邊,大於這個定點數的數放到其右邊,再把左邊的數,右邊的數再按這種方式來排序,直至無數可排.先實現,不求空間消耗,把小於定點的數放乙個陣列 b,把大於定點的數的放乙個陣列 c,再把它們拷回陣列 a int quick sort int...

快排的兩種partition函式

partition函式就是快排的關鍵部分,作用是將陣列劃分成兩部分,左邊小於基數,右邊大於基數 但實際上它也不僅僅用於快排,在求top k 問題中也常常會用到。下面介紹兩種partition函式,他們都是雙指標的方法,但具體會有差異 函式一 頭尾指標向中間夾 def partition array,...

快速排序 快排 演算法的C 兩種實現

快排演算法在分治的時候有兩種實現,一種實現是從兩邊到中間 partition 另一種實現是從一邊到另一邊 partition2 我用乙個100000陣列測試發現前一種實現執行速度快一些。這兩種的c 實現如下 注 我用的 風格是gnu的 風格 bool sort qsort int ini,int s...