快速排序算法Python实现

ops/2024/10/19 9:34:38/

快速排序原理和步骤

快速排序是一种高效的算法>排序算法,基于分治法(Divide and Conquer)来实现。其基本思想是通过一次排序将数组分成两部分,其中一部分的所有元素都小于另一部分,然后递归地对这两部分进行排序。以下是快速排序的详细步骤:

1. 选择基准元素

首先,从数组中选择一个基准元素(pivot)。基准元素的选择方法有多种,例如选择第一个元素、最后一个元素、中间元素或随机选择一个元素。基准元素用于将数组分成两部分。

2. 分区

通过遍历数组,将所有小于基准元素的元素放到基准元素的左边,所有大于基准元素的元素放到基准元素的右边。这个过程称为分区(partitioning)。分区后,基准元素的位置是其在最终排序数组中的正确位置。

3. 递归排序

对基准元素左边的子数组和右边的子数组分别递归地应用快速排序。这个过程将不断分割和排序子数组,直到所有子数组的长度为1,表示数组已经有序。

4. 合并

由于快速排序是原地排序(in-place sorting),不需要额外的合并步骤。递归过程结束后,整个数组已经有序。

快速排序的完整步骤

  1. 选择基准: 选择一个基准元素。
  2. 分区: 将数组分成两部分,一部分小于基准元素,另一部分大于基准元素。
  3. 递归排序: 递归地对基准元素左边和右边的子数组进行排序。
  4. 完成: 递归结束后,数组有序。

快速排序的伪代码

void quickSort(vector<int>& arr, int low, int high) {if (low < high) {// 获取分区点int pi = partition(arr, low, high);// 对分区点左边的子数组进行递归排序quickSort(arr, low, pi - 1);// 对分区点右边的子数组进行递归排序quickSort(arr, pi + 1, high);}
}int partition(vector<int>& arr, int low, int high) {// 选择最后一个元素作为基准int pivot = arr[high];int i = (low - 1);for (int j = low; j <= high - 1; j++) {// 如果当前元素小于或等于基准if (arr[j] <= pivot) {i++;// 交换 arr[i] 和 arr[j]swap(arr[i], arr[j]);}}// 交换 arr[i + 1] 和 arr[high] (或基准)swap(arr[i + 1], arr[high]);return (i + 1);
}

Python实现:

python">def quick_sort(arr):"""对数组进行快速排序:param arr: 待排序的数组:return: 已排序的数组"""# 如果数组的长度为0或1,直接返回数组if len(arr) <= 1:return arr# 选择数组的最后一个元素作为基准pivot = arr[-1]# 定义两个空列表,分别存放小于和大于基准的元素left = []right = []# 遍历数组(不包括最后一个元素,即基准)for element in arr[:-1]:if element < pivot:left.append(element)else:right.append(element)# 递归地对左右两个子数组进行快速排序,并合并return quick_sort(left) + [pivot] + quick_sort(right)

http://www.ppmy.cn/ops/56350.html

相关文章

绿色金融相关数据合集(2007-2024年 具体看数据类型)

数据类型&#xff1a; 1.绿色债券数据&#xff1a;2014-2023 2.绿色信贷相关数据&#xff1a;2007-2022 3.全国各省及地级市绿色金融指数&#xff1a;1990-2022 4.碳排放权交易明细数据&#xff1a;2013-2024 5.绿色金融试点DID数据&#xff1a;2010-2023 数据来源&#…

Git的稀疏检出(sparse checkout)

使用git bash 创建项目目录 mkdir projectDir 进入目录 cd projectDir 初始化空仓库 git init 关联远程地址 git remote add -f origin http://xxx.git 开启Sparse Checkout模式 git config core.sparsecheckout true 设置Check Out的文件或目录 echo "dir1/&…

绝区伍--2024年AI发展路线图

2024 年将是人工智能具有里程碑意义的一年。随着新模式、融资轮次和进步以惊人的速度出现&#xff0c;很难跟上人工智能世界发生的一切。让我们深入了解 2024 年可能定义人工智能的关键事件、产品发布、研究突破和趋势。 2024 年第一季度 2024 年第一季度将推出一些主要车型并…

局域网远程共享桌面如何实现

在局域网内实现远程共享桌面&#xff0c;可以通过以下几种方法&#xff1a; 一、使用Windows自带的远程桌面功能&#xff1a; 首先&#xff0c;在需要被控制的电脑上右键点击“此电脑”&#xff0c;选择“属性”。 进入计算机属性界面后&#xff0c;点击“高级系统设置”&am…

AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.07.01-2024.07.05

文章目录&#xff5e; 1.InternLM-XComposer-2.5: A Versatile Large Vision Language Model Supporting Long-Contextual Input and Output2.BACON: Supercharge Your VLM with Bag-of-Concept Graph to Mitigate Hallucinations3.Improving Zero-shot Generalization of Lear…

关于Python的类的一些理解

才发现python的类对象只能调用类方法 我想使用对类对象a使用系统调用的len方法就会报错 2.类对象a是什么&#xff1f; 答&#xff1a;是所有的带有self的成员变量 举例说明&#xff1a;红色的就是a里面的东西 class A:def __init__(self,data):self.datadataself.b1self.d{a…

识别色带后执行相应命令

识别到红色和绿色色带后&#xff0c;会执行相应的命令以调整机器狗的行为&#xff0c;具体如下&#xff1a; 红色色带识别&#xff1a; 在 track 模式下&#xff0c;当识别到红色色带时&#xff0c;机器人会进入 divergeright 模式&#xff0c;表示机器人需要在接下来的行动中向…

Elasticsearch 建议(Suggesters):实现自动补全和拼写检查

引言 在现代搜索引擎中&#xff0c;自动补全和拼写检查功能已成为提升用户体验的重要工具。Elasticsearch&#xff0c;作为一款强大的分布式搜索和分析引擎&#xff0c;提供了多种Suggesters API来帮助开发者实现这些功能。本文将详细介绍Elasticsearch中的四种主要Suggester—…