快速排序

快速排序

概念

快速排序是在分治算法基础上设计出来的一种排序算法

优点

与其他算法相比,快速排序算法具有:效率高、耗费资源少、容易实现

实现思路

  1. 从待排序的序列中任意选择一个元素,假设为pivot,作为中间元素
  2. 将所有比pivot小的元素放到它的左边,比pivot大的元素放到它的右边,把序列分成左右两个子序列
  3. 将左右两个子序列看作待排序列,重复1、2步骤
  4. 直到所有子序列不可再分,也就是子序列不可再分或不包含任何元素,整个序列就变成了一个有序的序列

画图实现

代码实现

# 快速排序

def fastSort(arr,l,r):
    if l>=r: # 序列的左右边界,如果左边界大于等于右边边界,说明序列不可再分
        return
    left=l # 序列的左边界
    right=r # 序列的右边界
    pivot=arr[r] # 最右边的数字为基准数

    while True:
        while arr[left]<pivot and left<right: # 左边的元素小于pivot
            left+=1
        while arr[right]>pivot and left<right: # 右边的元素大于pivot
            right-=1
        if left>=right:
            break
        else:
            arr[left],arr[right]=arr[right],arr[left]
            left+=1
            right-=1
    # 此时 left=right
    arr[left],arr[r]=arr[r],arr[left]
    mid=left
    fastSort(arr,l,mid-1) # 左边的子序列
    fastSort(arr,mid+1,r) # 右边的子序列
arr = [35, 33, 42, 10, 14, 19, 27, 44, 26, 31]
fastSort(arr, 0, len(arr)-1)
print(arr)
posted @ 2022-04-29 00:15  黎白昼  阅读(26)  评论(0)    收藏  举报