直接排序屬於交換排序
基本思想:
1:選1個基準元素(通常是第乙個元素或最後乙個元素),將待排數列分成兩部分,一部分比基準元素小,一部分比基準元素大
2:再對這兩部分數列重複步驟1
時間複雜度:
最好情況:o(n*logn)
最壞情況,退化為氣泡排序 o(n*n)
穩定性:不穩定
python**實現:quick_sort.py
def swap(l, i, j):
tmp = l[i]
l[i] = l[j]
l[j] = tmp
def partition(l, low, high):
pivo = l[low] #基準元素選取
while(low != high): #從數列兩端交替掃瞄
while(low < high and l[high] >= pivo): #從high位置向前搜尋,將比基準元素小的交換到低端
high -= 1
swap(l, low, high)
while(low < high and l[low] <= pivo):#從low位置向後搜尋,將比基準元素大的交換到高階
low += 1
swap(l, low, high)
return low
def quick_sort(l, low, high):
if low < high:
pivokey = partition(l, low, high)
quick_sort(l, low, pivokey-1) #遞迴對低端數列排序
quick_sort(l, pivokey+1, high) #遞迴對高階數列排序
if __name__ == '__main__':
l = [57,12,63,29,37,18,34,46,92,87]
quick_sort(l, 0, 9)
print('result:' + str(l))
排序演算法 交換排序 快速排序演算法
快速排序演算法 列印資料 void print list int data list int left int right printf n 核心排序 找到基準位置 挖坑法 int core sort int data list int left int right if i j while i j...
排序演算法 交換排序之快速排序
和歸併排序一樣,快速排序也是一種分治的遞迴演算法。快速排序的思想是 選取乙個樞紐元,將比樞紐元小的元素放樞紐元前面,把比樞紐元小的元素放後面,然後將前面的集合,後面的集合,重複之前的步驟。樞紐元的選取是一門學問,我們要將樞紐元的盡量選取為集合中間值,使得樞紐元兩邊的元素量能更加均勻,避免大小不等的遞...
交換排序 快速排序
快速排序 quick sort 也是一種交換排序,它在排序中採取了分治策略。從待排序列中選取一元素作為軸值 也叫主元 將序列中的剩餘元素以該軸值為基準,分為左右兩部分。左部分元素不大於軸值,右部分元素不小於軸值。軸值最終位於兩部分的分割處。對左右兩部分重複進行這樣的分割,直至無可分割。從快速排序的演...