快速排序之所以比較快钳幅,是因為相比冒泡排序,每次交換是跳躍式的祸轮。每次排序的時候
設置一個基準點躏筏,將小于等于基準點的數(shù)全部放到基準點的左邊,將大于等于基準點的數(shù)全
部放到基準點的右邊专肪。這樣在每次交換的時候就不會像冒泡排序一樣只能在相鄰的數(shù)之間進
行交換刹勃,交換的距離就大得多了。因此總的比較和交換次數(shù)就少了嚎尤,速度自然就提高了荔仁。
def quick_sort(a, left, right):
if left >= right:
return
# temp保存基準數(shù)
temp = a[left]
i = left
j = right
while i!=j:
# 必須從j開始,以便于基準數(shù)歸為
while a[j] >= temp and j>i:
j -= 1
while a[i] <= temp and j>i:
i += 1
if j > i:
a[i], a[j] = a[j], a[i]
# 基準數(shù)歸位
a[left], a[i] = a[i], temp
quick_sort(a, left, i-1)
quick_sort(a, i+1, right)
if __name__ == '__main__':
a = []
n = int(raw_input())
for i in range(n):
a.append(int(raw_input()))
quick_sort(a, 0 , n-1)
最差時間復雜度為O(N^2)
,平均時間復雜度為O(NlogN)