クイックソート
は、バブルソートアルゴリズムの改良版です。並べ替えにより、並べ替えるデータを2つの独立した部分に分割します。一方の部分のすべてのデータは、もう一方の部分のすべてのデータよりも小さくなります。この方法により、2つの部分のデータをすばやく並べ替えることができます。並べ替えプロセス全体データ全体が順序付けられたシーケンスになるように、再帰的にすることができます
1.ベンチマーク値を選択します:「ピボット」と呼ばれるシーケンスから要素を選択します
2.セグメンテーション:シーケンスを並べ替えます。ベンチマーク値よりも小さいすべての要素がベンチマークの前に配置され、ベンチマーク値よりも大きいすべての要素が配置されますベンチマークの前に配置されますベンチマークの後ろに配置されます(ベンチマークに等しい数はどちらの側にも行くことができます)。このセグメンテーションが終了すると、参照値の
並べ替えが完了します。3 。サブシーケンスを再帰的に並べ替えます。参照値よりも小さい要素のサブシーケンスと、参照値よりも大きい要素のサブシーケンスを再帰的に並べ替えます。
最下位への再帰の判断条件は、シーケンスのサイズが0または1であるということです。この時点で、シーケンスは明らかにすでに順序付けられています。
参照値を選択するためのいくつかの特定の方法があり、この選択方法は、ソートの時間パフォーマンスに決定的な影響を及ぼします。
def parttion(arr,low,high):
# 最小元素索引
i = (low-1)
pivot = arr[high]
for j in range(low,high):
# 当前元素小于等于pivot
if arr[j] <= pivot:
i += 1
arr[i],arr[j] = arr[j],arr[i]
arr[i+1],arr[high] = arr[high],arr[i+1]
return ( i+1 )
# arr[] 排序数组
# low 起始索引
# high 结束索引
# 快速排序排序函数
def quickSort(arr,low,high):
if low < high:
pi = parttion(arr,low,high)
quickSort(arr,low,pi-1)
quickSort(arr,pi+1,high)
arr = [10,7,9,1,5]
n = len(arr)
quickSort(arr,0,n-1)
print("排列后的数组:",arr)