#快速排序
import random
import time
def quick_sort(array,start,end):
if start >= end:
return
k = array[start]
left_flag = start
right_flag = end
while left_flag < right_flag:
while left_flag < right_flag and array[right_flag] > k: #代表要继续往左边移动小旗子
right_flag -=1
tmp = array[left_flag]
array[left_flag] = array[right_flag]
array[right_flag] = tmp
while left_flag < right_flag and array[left_flag] <= k: #代表左边小旗子开始向右移动
left_flag +=1
#上面的循环一跳出,代表左边小旗子现在所处的位置的值是比k大的
tmp = array[left_flag]
array[left_flag] = array[right_flag]
array[right_flag] = tmp
#开始把问题分半
quick_sort(array,start,left_flag-1)
quick_sort(array,left_flag+1,end)
if __name__=='__main__':
array = []
for i in range(50000):
array.append(random.randrange(100000))
time_start = time.time()
quick_sort(array,0,len(array)-1)
time_end = time.time()
print (array)
print ("cost:",time_end-time_start)
#快速排序:0.031秒(5000个数字)0.047s(10000个数字)0.11s(20000个数字)0.33s(50000个数字)