資料結構 快速排序

2021-09-16 23:10:11 字數 1314 閱讀 7776

對於乙個序列,準備兩個游標,分別從左右兩端往中間夾擊,左邊遊標記為low,右邊遊標記為high,凡是左邊遇到的元素都要比指定的數字小,右邊的比指定的數字大,如果不滿足條件就停下, 兩個都停下了就交換元素位置。

我寫的文字是不是只有我自己能懂,不夠精煉。

兩邊夾擊,給指定元素安排位置,達到元素左邊元素比它小,右邊元素比它大的效果。

def quick_sort(alist, start, end):

"""快速排序"""

# 遞迴的退出條件

if start >= end:

return

# 設定起始元素為要尋找位置的基準元素

mid = alist[start]

# low為序列左邊的由左向右移動的游標

low = start

# high為序列右邊的由右向左移動的游標

high = end

while low < high:

# 如果low與high未重合,high指向的元素比基準元素大,則high向左移動

while low < high and alist[high] >= mid:

high -= 1

# 將high指向的元素放到low的位置上

alist[low] = alist[high]

# 如果low與high未重合,low指向的元素比基準元素小,則low向右移動

while low < high and alist[low] < mid:

low += 1

# 將low指向的元素放到high的位置上

alist[high] = alist[low]

# 退出迴圈後,low與high重合,此時所指位置為基準元素的正確位置

# 將基準元素放到該位置

alist[low] = mid

# 對基準元素左邊的子串行進行快速排序

quick_sort(alist, start, low-1)

# 對基準元素右邊的子串行進行快速排序

quick_sort(alist, low+1, end)

alist = [54,26,93,17,77,31,44,55,20]

quick_sort(alist,0,len(alist)-1)

print(alist)

快速排序是真的有點繞

最好時間複雜度:o(nlog(n))

最壞時間複雜度:o(n2)

不穩定

資料結構 排序 快速排序

對序列 47,31,83,91,57,18,96,16 進行快速排序 首元素為基準 第二趟排序結果是 正確答案 b 你的答案 c 錯誤 18 31 16 47 57 91 96 83 16 31 18 47 57 91 96 83 16 18 31 47 57 91 96 83 16 18 31 4...

資料結構 排序 快速排序

快速排序在平均情況下是效果最好的排序演算法 每趟子表的排序都是從兩頭向中間交替逼近,接下來舉乙個例子 sorry,上面這個圖的6和5的位置畫反啦,快速排序全域性有序,一趟排序便可以確定基準值的最終位置 類別排序方法 最好時間 最壞時間 平均時間 空間複雜度 穩定性序列特徵 適用於插入排序 直接插入排...

資料結構排序 快速排序

快速排序是對氣泡排序的改進,它的基本思想是通過一趟排序將資料分成兩部分,一部分中的資料都比另一部分中的資料小,再對這兩部分中的資料再排序,直到整個序列有序,如下圖所示。快排的遞迴實現 1 include 2 include 3 4intn 5 6 7 分割使樞軸記錄的左邊元素比右邊元素小8 9int...