"""快速排序的思路:
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...