#/usr/bin/python
#coding:utf8
import random
import time
import copy
testlist =[6
,1,2
,7,9
,3,4
,5,10
,8]testlist =[6
,1,2
,7,9
,3,4
,5,10
,8,2
,11,8
,1,13
,2,6
,1,8
,0,4
,2,3
,7,9
]testlist =
for i in
range
(10000):
num = random.randint(0,
10000
)testlist2 = copy.deepcopy(testlist)
defquicksort
(start, end)
: i = start
j = end
#第一步,設定乙個哨兵。
pivot = testlist[start]
#第二步,前後的資料分別與哨兵進行對比,進行置換,最後結果是使左邊的都小於哨兵值,右邊都大於哨兵值。
while i < j:
#j從最後乙個位置開始向前查詢,找到乙個比哨兵小的元素.
if testlist[j]
< pivot:
if testlist[i]
> pivot:
testlist[j]
, testlist[i]
= testlist[i]
, testlist[j]
#i從第乙個位置開始向後查詢,找到乙個比哨兵大的元素.
else
: i = i +
1#j從最後乙個位置開始向前查詢,找到乙個比哨兵小的元素.
else
: j = j -
1#最後當i < j 不在成立,可以把哨兵與j進行交換,這樣哨兵就在數列的中間位置,前邊都比哨兵值小,後邊都比哨兵值大.
testlist[j]
, testlist[start]
= testlist[start]
, testlist[j]
#只要start比i大說明小於哨兵的一邊沒有排序完成,需要繼續對比,重複上述過程。
if start < i:
quicksort(start, i-1)
#只要end>j 說明大於哨兵的一邊沒有對比完成,需要繼續對比,重複上述過程。
if end > j:
quicksort(j+
1, end)
return
0#氣泡排序
defbubblesort()
:for i in
range
(len
(testlist2)-1
):for j in
range
(i,len
(testlist2)):
if testlist2[i]
> testlist2[j]
: testlist2[i]
, testlist2[j]
= testlist2[j]
, testlist2[i]
if __name__ ==
'__main__'
: start = time.time(
) quicksort(0,
len(testlist)-1
) end = time.time(
)#print testlist
print end-start
start = time.time(
) bubblesort(
) end = time.time(
)#print testlist2
print end-start
執行的結果如下:
➜ quicksort python sort.py
0.0577049255371
12.5943760872
結論:
在大量資料的情況下:10000個隨機資料的情況下,快排要比最普通的氣泡排序快樂將近280倍。
演算法訓練營(鄧爺)棧排序
題目要求有些無厘頭 乙個輸入棧存放初始資料,乙個相同容量的輸出棧,借助乙個臨時空間完成排序。include include using namespace std typedef stacks i s i stacksort s i r 曾經寫錯在if之前 else return s int mai...
面試訓練營
1 重寫與過載之間的區別 方法過載 1 同乙個類中 2 方法名相同,引數列表不同 引數順序 個數 型別 3 方法返回值 訪問修飾符任意 4 與方法的引數名無關 方法重寫 1 有繼承關係的子類中 2 方法名相同,引數列表相同 引數順序 個數 型別 方法返回值相同 3 訪問修飾符,訪問範圍需要大於等於父...
TOT訓練營開篇
tot是 top of top 頂級中的頂級之意,tot 15是西安本地第一屆訓練營,我們是這一屆的第三批次,研發班兩個,總數為61個人,當然還有另外的測試沒有包括在內,測試也有兩個班,之前打聽到,測試是分自動化和業務測試的,其實我們也有劃分,只是當時老師們沒有說出來,據說,還有些專業專門考glod...