常用排序算法_05_快速排序

目录

1、基本思想

2、算法分析

3、代码实现

(1)python实现


1、基本思想

快速排序(Quicksort),又称划分交换排序(partition-exchangesort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程递归进行,以此达到整个数据变成有序序列。

2、算法分析

第一步:在数组中选一个基准元素(通常为数组第一个)。

第二步:将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

第三步:对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。

3、代码实现

(1)python实现

python 复制代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-


def quick_sort(data: list[int], first: int, last:int) -> None:
    if first >= last:
        return
    low = first
    high = last
    mid = data[low]
    while low < high:
        # 右指针移动
        while low < high and data[high] >= mid:
            high -= 1
        data[low] = data[high]
        # low += 1

        # 左指针右移
        while low < high and data[low] < mid:
            low += 1
        data[high] = data[low]
        # high -= 1

    data[low] = mid
    print(data)
    # 递归快速排序
    quick_sort(data, first, low-1)
    quick_sort(data, low+1, last)


def main():
    data = [54, 26, 93, 17, 77, 31, 45, 55, 20]
    # data = [3,1,5,2,1,0]
    # data = [7, 31, 23, 13, 35, 3]
    print(f"排序前:{data}")
    quick_sort(data, 0, len(data)-1)
    print(f"排序后:{data}")


if __name__ == '__main__':
    main()
相关推荐
带娃的IT创业者25 分钟前
《Python实战进阶》专栏 No.3:Django 项目结构解析与入门DEMO
数据库·python·django
MZWeiei44 分钟前
PTA:运用顺序表实现多项式相加
算法
GISer_Jing1 小时前
Javascript排序算法(冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序)详解
javascript·算法·排序算法
cookies_s_s1 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
HealthScience1 小时前
【异常错误】pycharm debug view变量的时候显示不全,中间会以...显示
ide·python·pycharm
不想编程小谭1 小时前
力扣LeetCode: 2506 统计相似字符串对的数目
c++·算法·leetcode
水蓝烟雨2 小时前
[HOT 100] 2187. 完成旅途的最少时间
算法·hot 100
豌豆花下猫2 小时前
Python 潮流周刊#90:uv 一周岁了,优缺点分析(摘要)
后端·python·ai
橘猫云计算机设计2 小时前
基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·python·计算机网络·毕设
小伍_Five2 小时前
从0开始:OpenCV入门教程【图像处理基础】
图像处理·python·opencv