快速排序(python版本)
這裡是一段防爬蟲文字,請讀者忽略。
本文原創首發於csdn,作者idys
部落格首頁:
先從數列中取出乙個數作為基準數。
分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
再對左右區間重複第二步,直到各區間只有乙個數。 0
1234
5678
970657
8850
4283
7330
85開始:i=0
,j=9
,x=list1[0]=70
首先從j=9
開始,檢視是否list[j]
小於x
,當j
等於9
時,因為list[j]>x
不符合條件,所以j
自減1
,此時j=8
,當j=8
時,發現list[j]
現在從i開始因為上一次i++
了,所以i=1
,先看因為list[1] < x
,所以i++
,當i=3
時,list[i]>x
,此時將list[j] = list[i] = 88
,然後j--
重複2
和3
的操作,直到i==j
為止,將x
賦給list[i]
最後列表結果為01
2345
6789
3065742
5070
8373
8885
這個時候可以看到,最後i==j
,i
和j
都等於5
,這個時候將list[5]=70
,但是排序還沒有完,我們還只是讓list[5]
左邊的數都比它小,list[5]
右邊的數,都比它大。但是左右兩邊不一定有序。所以需要讓左右兩邊變為乙個陣列。重新執行上述規則。這就需要用到分治演算法。
import random
defquick_sort
(mylist_and:
list):
def_quick_sort
(mylist:
list
, left:
int=
0, right:
int=
len(mylist_and)-1
)->
list
:if left < right:
i = left
j = right
x = mylist[i]
while i < j:
while i < j and mylist[j]
> x:
j -=
1if i < j:
mylist[i]
= mylist[j]
i +=
1while i < j and mylist[i]
< x:
i +=
1if i < j:
mylist[j]
= mylist[i]
j -=
1 mylist[i]
= x _quick_sort(mylist, i +
1, right)
_quick_sort(mylist, left, i -1)
return mylist
return _quick_sort(mylist_and)
if __name__ ==
'__main__'
: list1 =[1
,3,4
,7,12
,3,5
,80,1
,12,101
,101
,201,21
,7,9
] quick_sort(list1)
list2 =
[ random.randint(0,
1000
)for i in
range(10
)]print
("list2: "
.format
(list2)
)print
("sort after list2 "
.format
(quick_sort(list2)))
print
("sort after list1: "
.format
(list1)
)
list2: [583, 766, 583, 279, 995, 306, 767, 884, 488, 607]
sort after list2 [279, 306, 488, 583, 583, 607, 766, 767, 884, 995]
sort after list1: [1, 1, 3, 3, 4, 5, 7, 7, 9, 12, 12, 21, 80, 101, 101, 201]
快速排序的python版本
快速排序屬於分治演算法中最經典的乙個例項,不同於氣泡排序和選擇排序,快排的思想是選定乙個基準元素,根據該元素對列表進行初步排序,選出比該元素小的排在該元素之前,比該元素大的排在其後,然後,在對這兩組元素進行遞迴排序。關於快排的結構,書本上大致分為兩類,單向快排和雙向快排。演算法導論介紹的快排屬於單向...
快速排序演算法(python版本)
實現python 如下 import syssys.setrecursionlimit 100000 設定遞迴的最大限制次數為100000次from cal time import import random 遞迴partition函式 def partition li,left,right tmp...
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 ...