分治法——快速排序 (python解答)

算法设计与分析

分治法

快速排序

快速排序动画演示

实现代码:

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用法详解》

你可能感兴趣的:(算法)