#/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)
testlist.append(num)
testlist2 = copy.deepcopy(testlist)
def quicksort(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
#冒泡排序
def bubbleSort():
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倍。