演算法訓練營(一) 快速排序

2021-08-29 10:06:40 字數 2250 閱讀 6798

#/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...