ソートアルゴリズム(六)---クイックソート(スワップソート)
1198 ワード
詳細
直接ソートは交換ソートに属します
基本思想:
1:1つの基準要素(通常は最初の要素または最後の要素)を選択し、列を2つの部分に分け、一部は基準要素より小さく、一部は基準要素より大きい
2:この2つの部分の数列について手順1を繰り返します.
時間の複雑さ:
最良の場合:O(n*logn)
最悪の場合、発泡ソートO(n*n)に劣化する
安定性あんていせい:不安定
pythonコード実装:quick_sort.py
直接ソートは交換ソートに属します
基本思想:
1:1つの基準要素(通常は最初の要素または最後の要素)を選択し、列を2つの部分に分け、一部は基準要素より小さく、一部は基準要素より大きい
2:この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))