December 29, 2015 2:09 PM
今天介紹快速排序,這也是在實際中最常用的一種排序算法,速度快,效率高。就像名字一樣,快速排序是最優秀的一種排序算法。
思想
快速排序採用的思想是分治思想。
快速排序是找出一個元素(理論上可以隨便找一個)作爲基準(pivot),然後對數組進行分區操作,使基準左邊元素的值都不大於基準值,基準右邊的元素值 都不小於基準值,如此作爲基準的元素調整到排序後的正確位置。遞歸快速排序,將其他n-1個元素也調整到排序後的正確位置。最後每個元素都是在排序後的正 確位置,排序完成。所以快速排序算法的核心算法是分區操作,即如何調整基準的位置以及調整返回基準的最終位置以便分治遞歸。
一、假設我們給一個int數組進行排序,數組中數字初始序列爲[3,6,5,9,7,1,8,2,4]
二、分析快速排序的原理前,我們先聲明一些東西,首先設置一個臨時變量用來存放隨機取出數組中的一個數,一般我們取數組的第一個元素也就是說temp=a[0],同時設置兩個遊標分別指向數組第一個元素和最後一個元素
三、算法的基本運算步驟爲:1、依次比較數組的後遊標所指與temp的大小,如果temp<
a[j],則j–,直到遇到第一個temp>a[j],則停止移動,將a[j]賦值給a[i]
四、算法的基本運算步驟爲:2、依次比較數組的前遊標所指與temp的大小,如果temp>a[i],則i++,直到遇到第一個temp<
a[i],則停止移動,將a[i]賦值給a[j]
#QuickSort.py
#王淵
#2015.12.23
#Email:[email protected]
from pylab import *
def QuickSort(data, start, end):
oldStart = start
oldEnd = end
flag = True
while(start < end): #從表的兩端向中間掃描
if flag: #樞軸值在子表前邊
if(data[start]<data[end]):
end = end-1
else:
data[start],data[end] = data[end],data[start]
start = start+1
flag = False
elif (~flag): #樞軸值在子表後邊
if(data[start]<data[end]):
start = start+1
else:
data[start],data[end] = data[end],data[start]
end = end-1
flag = True
if(oldStart != oldEnd):
QuickSort(data, oldStart, start) #對低子表遞歸排序
QuickSort(data, start+1, oldEnd) #對高子表遞歸排序
data = [48,1,16,62,73,88,24,59,99,0,35]
length = data.__len__() #獲取數據長度
print("The original data is : ", data)
QuickSort(data, 0,length-1)
print("The result of sorted data is : ", data)
運行結果:
The original data is : [48 1 16 62 73 88 24 59 99 0 35]
The result of sorted data is : [ 0 1 16 24 35 48 59 62 73 88 99]