Python實現快速排序

2021-08-15 01:33:21 字數 2859 閱讀 9245

"""

快速排序的思路:

numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]1、設

keys(

又稱為監視哨)等於

numlist=[0],i等於0

,j等於len(numlist)-1,

即如下:

numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]

| |

keys=6

,i=0 j2、

(1)、第一次排序的第一趟是拿

numlis[j]

和keys

比較,如果

numlist[j]則把

numlist[j]

賦給numlist[i],

如果numlist[j]>keys,則j

向前移一位,即

:j -= 1,

在例子numlist

中,第一次比較

因為keys=6,numlist[j]=6,

所以j -= 1

,如下所示

:numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]

| |

keys=6

,i=0 j

然後繼續拿

numlist[j]

和keys

相比,因為

numlist[j]=15 > keys

,所以j -= 1,j

的位置如下:

numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]

| |

keys=6

,i=0 j

此時因為

numlist[j]=2 < keys ,

便進行 賦值

: numlist[i] = numlist[j],

完成第一次趟排序,

完成第一次趟排序後,

numlist

和i,j

的位置如下:

numlist = [2, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]

| |

i=0 j

(2)、第一次排序的第二趟是拿前面開始往後搜尋,如果比

keys

大,則賦值給

numlist[j],

因為此時

numlist[i]=2,所以

i向後移一位,即

i += 1

,此時i

的位置如下

:numlist = [2, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]

| |

i=0 j

因為此時的

numlist[i]=8>keys,

所以進行

numlist[j]=numlist[i]

運算,然後再進行

numlist[i] = keys

的運算,經過第二趟排序後,

numlist如下:

numlist = [2, 6, 1, 4, 3, 9, 5, 4, 11, 2, 8, 15, 6]

| |

i=0 j

3、繼續重複

2的步驟,直到

i>=j,

跳出第一次排序,並且返回

i的值,經過第一次排序後的

numlist

如下:numlist = [2, 2, 1, 4, 3, 4, 5, 6, 11, 9, 8, 15, 6]

4、然後進行遞迴,直到排序完成

"""def

quicky_sort(datalist,left,right):

keys = datalist[left]

i = left

j = right

while iwhile iand datalist[j]>=keys:

j -= 1

datalist[i] = datalist[j]

while iand datalist[i]<=keys:

i += 1

datalist[j]=datalist[i]

datalist[i]=keys

return i

def

tempquick(datalist1,left,right):

if left,left,right)

#進行遞迴

tempquick(datalist1,left,p-1)

tempquick(datalist1,p+1

,right)

return datalist1

numlist = [6, 8

, 1, 4

, 3, 9

, 5, 4

, 11, 2

, 2, 15

, 6]

print(tempquick(numlist,0,

len(numlist)-1))

python實現快速排序

快速排序的思想是任意選取要排序的list中的乙個數pivot,每次遞迴時將list按照 小於pivot的,pivot,大於pivot的 排序,再對小於和大於pivot部分分別快速排序。function quicksort list select a pivot foreach x in list i...

python實現快速排序

coding utf 8 實現對列表中的數進行快速排序 importrandom 隨機生成乙個有1000整數的列表 number random.randint 1 1000 foriinrange 1000 列印原始列表 printnumber 單個列表快速排序函式 返回一次排序後的列表和所選取基數...

python 實現快速排序

參考的部落格 from future importprint function a 72,6,57,88,60,42,83,73,48,85 defquick sort a,l,r ifl 取得基數 whileindexi indexj whileindexi indexjanda indexj x...