十大排序算法之->快速排序

一、快速排序简介

快速排序(Quick Sort)是一种高效的排序算法,它的基本思想是采用分治法来实现排序。

快速排序的工作原理基于分治的思想。首先选取一个基准元素,通常选择第一个或最后一个元素。然后重新排列数组中的元素,使得比基准值小的元素放在它的左边,比基准值大的元素放在它的右边。接着,算法递归地在基准值左边和右边的两个子数组上执行相同的操作,直到每个子数组只有一个元素或者为空,这样就完成了排序过程。

快速排序的平均时间复杂度为O(n log n),在最坏情况下会退化到O(n^2)

二、Python代码实现

# -*- coding: utf-8 -*-
"""
======================================File Name  : quick_sort.pyAuthor     : lanmingyong(小黑测试员)date       : 2024/6/4 20:30Description: 快速排序(Quick Sort)是一种高效的排序算法,它的基本思想是采用分治法来实现排序。快速排序的工作原理基于分治的思想。首先选取一个基准元素,通常选择第一个或最后一个元素。然后重新排列数组中的元素,使得比基准值小的元素放在它的左边,比基准值大的元素放在它的右边。接着,算法递归地在基准值左边和右边的两个子数组上执行相同的操作,直到每个子数组只有一个元素或者为空,这样就完成了排序过程。快速排序的平均时间复杂度为O(n log n),在最坏情况下会退化到O(n^2)
======================================= 
"""def quick_sort(arr):  # [9, 11, 7]if len(arr) < 2:return arrmid = arr[0]left_arr = []right_arr = []mid_arr = []for i in arr:if i < mid:left_arr.append(i)if i > mid:right_arr.append(i)if i == mid:mid_arr.append(i)print("分组结果:" + "左边组" + str(left_arr) + "中间组" + str(mid_arr) + "右边组" + str(right_arr))return quick_sort(left_arr) + mid_arr + quick_sort(right_arr)# 验证
arr = [9, 6, 7, 2, 8, 1, 0, 4, 3, 0]
# arr = [89, 65, 21, 8, 76, 79, 0, 86, 51, 33, 34, 8, 76, 53, 93, 88, 65, 0, 92, 56, 76, 9, 0, 54, 9, 37, 94, 72, 92, 72, 88, 44, 34, 48, 14, 22, 76, 34, 45, 50, 66, 4, 77, 41, 64, 24, 65, 99, 16, 64]print(quick_sort(arr))
# 执行输出
"""
分组结果:左边组[6, 7, 2, 8, 1, 0, 4, 3, 0]中间组[9]右边组[]
分组结果:左边组[2, 1, 0, 4, 3, 0]中间组[6]右边组[7, 8]
分组结果:左边组[1, 0, 0]中间组[2]右边组[4, 3]
分组结果:左边组[0, 0]中间组[1]右边组[]
分组结果:左边组[]中间组[0, 0]右边组[]
分组结果:左边组[3]中间组[4]右边组[]
分组结果:左边组[]中间组[7]右边组[8]
[0, 0, 1, 2, 3, 4, 6, 7, 8, 9]
"""

:如果代码有错误欢迎指出交流,感谢!!

三、动画演示

图片

欢迎大家关注我的订阅号,会不定期分享一些相关的文章,有问题也欢迎一起讨论交流学习!
在这里插入图片描述 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/22640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零入手人工智能(1)——卷积神经网络

1.前言 本人作为一名单片机工程师&#xff0c;近期对人工智能领域产生了浓厚的兴趣&#xff0c;并开始了我的探索之旅。人工智能是一个博大精深的领域&#xff0c;我相信有许多志同道合的朋友也希望涉足这个领域&#xff0c;因此我写下这篇文章&#xff0c;旨在详细记录我学习…

Java:流程控制语句

文章目录 一、顺序结构二、分支结构2.1 if2.2 switch 三、循环结构3.1 for3.2 while3.3 do...while 四、流程控制4.1 break4.2 continue 五、结语 一、顺序结构 顺序结构语句是Java程序默认的执行流程&#xff0c;按照代码的先后顺序&#xff0c;从上到下依次执行。 二、分支结…

雷士大路灯有必要买吗?雷士、书客、孩视宝护眼落地灯实测PK!

面对市面上众多的护眼大路灯品牌&#xff0c;其中雷士、书客和孩视宝这几款大路灯受到了广泛的青睐&#xff0c;也是热度比较高的几款产品&#xff0c;正是因为这么多款大路灯&#xff0c;很多伙伴在看到文章推荐后很纠结&#xff0c;不知道如何选择&#xff0c;也有一部分伙伴…

TH方程学习 (7)

一、内容介绍 TH存在广泛应用&#xff0c;在下面案例中&#xff0c;将介绍几种相对运动模型&#xff0c;斜滑接近模型&#xff0c;本节学习斜滑接近制导方法能够对接近时间、接近方向以及自主接近过程的相对速度进行控制。施加脉冲时刻追踪器的位置连线可构成一条直线&#xf…

自动装车系统车辆定位-激光雷达解决方案

在自动装车系统中&#xff0c;激光雷达为车辆定位提供了一种高效且精确的解决方案。以下是关于这一解决方案的详细分析&#xff1a; 一、解决方案概述 激光雷达解决方案在自动装车系统中&#xff0c;通过发射激光束并接收目标反射回来的信号&#xff0c;来探测车辆的位置、状…

Win10下CodeBlock实现socket TCP server/client

文章目录 1 安装codeblock2 适配libws2_32.a库3 TCP socket工作原理4 代码实现服务端客户端5 运行效果1 安装codeblock 官方免费下载 值得一提的是,安装时,指定安装路径,其他默认安装即可 2 适配libws2_32.a库 默认安装,只有3个库,如果编译socket,需要专门的库libws2…

CA到TA的调用流程是什么?如何实现的?

快速链接: . &#x1f449;&#x1f449;&#x1f449;Trustzone/TEE/安全 面试100问-目录 &#x1f448;&#x1f448;&#x1f448; 付费专栏-付费课程 【购买须知】:联系方式-加入交流群 ----联系方式-加入交流群 个人博客笔记导读目录(全部) 简单一点来说&#xff0c;CA…

【机器学习基础】Python编程02:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

SolidWorks价格与其它CAD软件相比:为什么选择SolidWorks更划算

在CAD软件的浩瀚星海中&#xff0c;SolidWorks如同一颗璀璨的明星&#xff0c;以其卓越的性能、广泛的适用性和合理的定价策略&#xff0c;赢得了全球众多工程师和设计师的青睐。亿达四方&#xff0c;作为官方授权的SolidWorks代理商&#xff0c;今天将带您深入价格与功能的比较…

【成品设计】基于单片机的智慧交通控制系统设计

《基于单片机的智慧交通控制系统设计》 所需器件&#xff1a; STM32最小系统板。按键模块。红黄绿LED灯柱。距离传感器。OLED屏幕。语音识别模块。 整体功能&#xff1a; 本文介绍了一种基于单片机的智慧交通控制系统设计。该系统集成了多种传感器、控制器和执行器&#xf…

外卖APP与外卖小程序开发:从源码到上线的全流程

本文&#xff0c;小编将详细介绍外卖系统与小程序开发的全过程&#xff0c;从源码的编写到系统的上线&#xff0c;为开发者提供全面的指导。 一、需求规划 用户需要一个简单易用的点餐界面&#xff0c;商家需要管理菜单、订单和配送&#xff0c;后台管理则需要监控系统运行状况…

交互式流程图组件DHTMLX Diagram v6.0 - 拥有更灵活的高度可定制功能

DHTMLX Diagram库允许用几行代码构建JavaScript流程图&#xff0c;通过自动布局和实时编辑器&#xff0c;它可以更容易地将复杂数据可视化到一个整洁的层次结构中。 DHTMLX Diagram v6.0版本发布&#xff0c;带来了众多令人兴奋的新功能和改进&#xff0c;使得这个JavaScript图…

智慧校园教学模式的崛起:优化学习体验

在当今数字化时代&#xff0c;智慧校园教学模式正在成为教育界的热门话题。随着科技的不断发展&#xff0c;传统的教学方式已经无法满足现代学生的需求。智慧校园教学模式以其灵活性、互动性和个性化的特点&#xff0c;正逐渐改变着教育的面貌。 首先&#xff0c;智慧校园教学模…

【C++练级之路】【Lv.24】异常

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、异常的概念及定义1.1 异常的概念1.2 异常的定义 二、异常的使用2.1 异常的栈展开匹配2.2 异常的重新…

人工智能--深度神经网络

目录 &#x1f349;引言 &#x1f349;深度神经网络的基本概念 &#x1f348;神经网络的起源 &#x1f34d; 神经网络的基本结构 &#x1f349;深度神经网络的结构 &#x1f348; 卷积神经网络&#xff08;CNN&#xff09; &#x1f348;循环神经网络&#xff08;RNN&…

AI进阶指南第三课,了解什么是大模型?

一&#xff0c;前言&#xff1a; 在上一讲里面&#xff0c;我主要演示了一下如何通过调用openAI的API来创建一个自己的AI智能客服助理。 看似这种AI智能客服助理似乎已经能够满足一部分企业要求&#xff08;当然&#xff0c;是在能够成功解析结构的情况下&#xff09;。 然而…

MYSQL四大操作——查!查!查!

目录 简洁版&#xff1a; 详解版&#xff1a; SQL通用语法&#xff1a; 分类&#xff1a; 1. DDL —库 1.1 查询&#xff1a; 1.2 创建&#xff1a; 1.3 删除 1.4 使用库 2. DDL—表 2.1 查询 2.1.1 查询当前库的所有表&#xff1a; 2.1.2 查询表结构 &#xff1a; 2.1…

ip 命令:比 ifconfig 更强大、更灵活的网络配置工具

ifconfig vs ip&#xff1a;网络配置命令的差异与比较 一、背景二、ip 命令&#xff1a;ifconfig 的替代方案三、ip 与 ifconfig 命令的比较3.1、显示所有网络接口3.2、添加或删除 IP 地址3.3、添加 MAC 地址3.4、设置其他网络接口配置3.5、启用或禁用网络接口3.6、启用或禁用 …

罗德、西圣、猛犸无线麦克风哪个好?罗德、西圣领夹麦克风对比测评

在当今短视频蓬勃发展的时代&#xff0c;越来越多的人投身于短视频创作的浪潮之中&#xff0c;通过镜头捕捉生活点滴&#xff0c;记录工作瞬间。而在谈及视频制作时&#xff0c;不得不提及的是视频录制工具。目前&#xff0c;随着手机影像技术的飞速发展&#xff0c;其视频录制…

实测有效:Win11一键恢复win10经典右键菜单,让Win11右键默认显示更多设置教程!

Win11一键还原win10右键菜单&#xff1f;win11右键菜单怎么改&#xff1f;怎样让Win11右键默认显示更多选项&#xff1f;今天&#xff0c;我要给你们介绍一款专为Windows 11系统设计的小巧工具&#xff0c;它能让你的右键菜单瞬间回到Win10时代&#xff0c;那种熟悉的感觉&…