python 寫的快速排序

2021-09-30 04:32:09 字數 1961 閱讀 7893

def paixu(list1):  第一種方法比較簡單,就是跟list1的第乙個元素座大小的比較,也比較好理解的,

if len(list1)==0:

return list1

else:

a=list1[0]

b=[ ]

c=[ ]

for x in list1[1:]:

if x

else:

s=paixu(b)

m=paixu(c)

return m+[a]+s

第二種方法(quick sort)

他的原理是

這邊所介紹的快速演算如下:

將最左邊的數設定為軸,並記錄其值為 s

廻圈處理:

令索引 i 從數列左方往右方找,直到找到大於 s 的數

令索引 j 從數列右方往左方找,直到找到小於 s 的數

如果 i >= j,則離開迴圈

如果 i < j,則交換索引i與j兩處的值

將左側的軸與 j 進行交換

對軸左邊進行遞迴

對軸右邊進行遞迴

透過以下演演算法,則軸左邊的值都會小於s,軸右邊的值都會大於s,如此再對軸左右兩邊進行遞迴,就可以對完成排序的目的,例如下面的例項,*表示要交換的數,表示軸:

然後**是這樣的:

def paixu(list1, m, n): 這裡的m的值一般設為0,而n的值的為len(list1)-1,也就是list1這個序列的最大元素位置

if m < n:     這裡是判斷,其實ms = list1

-   這裡把list1的第乙個元素作為判斷大小的依據

i = m

j = n + 1

while true:

while i + 1 < len(list1): 

i += 1

if list1[i] >= list1

-:                            

break

while j - 1 > -1:

j -  = 1

if list1[ j ] <= list1

-:break

if i >= j:

break

list1[i], list1[ j ]  = list1[ j ] , list1[ i ] 這裡是將ilist1

-, list1[ j ] = list1[ j ], list1

-  這裡是將第乙個元素替換到迴圈到lsit1[j]的值

realsort(list1, m, j - 1)   將list1

-前邊的值再進行替換

realsort(list1, j + 1, n)   將list1

-後便的值進行替換

return list1

python快速排序排序 python快速排序

import random def rand n for i in range n yield random.randint 0,1000 建立乙個隨機數列表 def createlist n lists for i in rand n return lists 挖坑法快速排序 def quick ...

Python的快速排序

快速排序 alist要排序的元素start為起始元素 def quick sort alist,start,end if start end return 設定起始元素為要尋找位置的基準元素 mid alist start low為序列左邊的由左向右移動的游標 low start high為序列右邊...

排序 快速排序 Python

快速排序 快排 是非常常用的排序方法,在技術面試中出現頻率也特別高。它主要採用交換和分治的策略進行排序。是不穩定排序。步驟 1 在序列中選乙個元素作為劃分的基準元素 pivot 2 將所有不大於pivot的數字放在pivot的前面,大於pivot的數字放在pivot的後面 3 以pivot為界,對前...