python学习——python实现快速排序算法

python实现快速排序算法

  • 一、快速排序算法实现原理
    • 基本思想
    • 具体步骤
  • 二、图解快速排序
  • 三、py代码实现快速排序算法

一、快速排序算法实现原理

基本思想

  • 先从数列中取出一个数作为基准数。
  • 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
  • 再对左右区间重复第二步,直到各区间只有一个数。

具体步骤

  1. 先以一个基准开始(通常为第一个数)
  2. 从右边开始找到第一个比基准小的数
  3. 从左边开始找到第一个比基准大的数
  4. 将比基准小的数和比基准大的数调换位置
  5. 继续从右往左以及从左往右调到对应的数,直到二边重合结束
  6. 将基准的数与重合的数调换位置,这是基准左边都是小的数,右边都是大的数
  7. 重复1,2,3,4对左右两边的数进行排序

二、图解快速排序

python学习——python实现快速排序算法_第1张图片

三、py代码实现快速排序算法

关键代码:


def quit_sort(arr, left, right):
    """快速排序算法
        思想:快速排序是效率最高的排序算法之一,
        1.先以一个基准开始(通常为第一个数)
        2.从右边开始找到第一个比基准小的数
        3.从左边开始找到第一个比基准大的数
        4.将比基准小的数和比基准大的数调换位置
        5.继续从右往左以及从左往右调到对应的数,直到二边重合结束
        6.将基准的数与重合的数调换位置,这是基准左边都是小的数,右边都是大的数
        7.重复1,2,3,4对左右两边的数进行排序
    """
    # 列表长度大于1
    if len(arr) <= 1 or left > right:
        return
         # 定义基准
    temp = arr[left]
    # 定义从左边开始的数(基准的下一个数)
    i = left
    # 定义从右边开始的数(要判断的末尾)
    j = right
    # 一直循环到从左边开始的碰到从右边开始的
    while i < j:
        # 从右边开始的一直循环到第一个比基准小的数且没有碰头为止
        while arr[j] >= temp and i < j:
            j -= 1
        # 从左边开始的一直循环到第一个比基准大的数且没有碰头为止
        while arr[i] <= temp and i < j:
            i += 1
        # 当在两边找到符合条件且没有碰头的数据时,将数据调换位置
        if i < j:
            mTemp = arr[j]
            arr[j] = arr[i]
            arr[i] = mTemp
        # 继续往下循环找到所有的符合条件的并调换位置

    # 到这里当前基准循环完毕,将当前基准和结束循环的位置数调换,使得基准左边都是小于基准的数,右边都是大于基准的数
    arr[left] = arr[i]
    arr[i] = temp
    # 继续将基准两边的数进行以上操作
    quit_sort(arr, left, j-1)
    quit_sort(arr, j+1, right)
        

运行:

# 定义一个列表
arr = [2, 3, 1, 5, 10, 6, 3, 4, 8]
print(arr)
quit_sort(arr, 0, len(arr) - 1)
print(arr)

打印结果:

[2, 3, 1, 5, 10, 6, 3, 4, 8]
[1, 2, 3, 3, 4, 5, 6, 8, 10]

你可能感兴趣的:(python学习,python,排序算法,快速排序)