算法设计与分析
分治法
快速排序
快速排序动画演示
实现代码:
def quicksort(arr,left = None,right = None): #快速排序 arr-数列,lerf-数列最左元素下标,right-数列最右元素下标
left = 0 if not isinstance(left,int) else left #左下标以整数形式显示
right = len(arr)-1 if not isinstance(right,int) else right #右下标以整数形式显示
if left < right: #判断左下标小于右下标
p = partition(arr,left,right) #返回分裂位置
quicksort(arr,left,p-1) #继续分裂直至左下标大于或等于右下标
quicksort(arr,p+1,right)
def swap(arr,i,j): #数列中两个元素置换
arr[i],arr[j] = arr[j],arr[i]
def partition(arr,left,right): #分裂函数
pivot = left
index = pivot + 1
i = index
while i <= right: #进行划分
if arr[i] < arr[pivot]:
swap(arr, i, index) #如果i元素小于左元素,进行元素位置互换
index += 1
i += 1
swap(arr, pivot, index - 1) #该次划分最后一次交换
return index - 1
def main():
arr = []
line = input().split(" ") # 输入排序数列
for x in range(len(line)):
arr.append(int(line[x]))
right = len(arr)
quicksort(arr,0,right - 1) #进行快速排序
print(arr) #输出排序好的数列
if __name__=='__main__':
main()
输入
9 8 4 56 1 2 3 5 44 88 12
输出
[1, 2, 3, 4, 5, 8, 9, 12, 44, 56, 88]
上一篇文章———>分治算法——归并排序
下一篇文章———>《Python之format用法详解》