文章目錄
快速排序的原理是將取出第一個數,將整個數組分為兩波,一撥都大於這個數,另一波都小於這個數,然後遞迴用同樣的方法處理第一波數字和第二波數字。都說是“快速排序”,效率肯定比其他的一般排序演算法高,下面我們就來驗證一把,比較一下所謂的“快速排序”和“冒泡排序”的效能差異。
1. 快速排序def quicksort(data, low = 0, high = None):
if high == None:
high = len(data) - 1
if low < high:
s, i, j = data[low], low, high
while i < j:
while i < j and data[j] >= s:
j = j - 1
if i < j:
data[i] = data[j]
i = i + 1
while i < j and data[i] <= s:
i = i + 1
if i < j:
data[j] = data[i]
j = j - 1
data[i] = s
quicksort(data, low, i - 1)
quicksort(data, i + 1, high)2. 冒泡排序
def bubblesort(data):
for i in range(len(data) - 1, 0, -1):
for j in range(0, i):
if data[j] > data[j + 1]:
data[j], data[j + 1] = data[j + 1], data[j]
3. 效能比較
上面看來,冒泡排序只需要5行,夠簡潔的,但效能咋樣呢?來比較一下吧:
import random
import datetime
import copy
def sort_perfmon(sortfunc, data):
sort_data = copy.deepcopy(data)
t1 = datetime.datetime.now()
sortfunc(sort_data)
t2 = datetime.datetime.now()
print sortfunc.__name__, t2 - t1
#print sort_data
data = [random.randint(0, 65536) for i in range(2000)]
#print data
sort_perfmon(quicksort, data)
sort_perfmon(bubblesort, data)
4. 結果
通過對隨機的2000個數字進行排序,下面的結果可非常容易的看出,快速排序的優勢是非常大的。
quicksort 0:00:00.062000
bubblesort 0:00:03.563000
5. 代碼下載
http://files.cnblogs.com/coderzh/Code/sorttest.rar
Python 天天美味系列(總)
Python 天天美味(28) - urlopen
Python 天天美味(29) - 調用VC++的動態連結程式庫(DLL)
Python 天天美味(30) - python資料結構與演算法之快速排序
Python 天天美味(31) - python資料結構與演算法之插入排序
Python 天天美味(32) - python資料結構與演算法之堆排序
...