首页 > 编程语言 >排序算法——快速排序

排序算法——快速排序

时间:2024-04-07 17:02:55浏览次数:25  
标签:arr end int 基准 begin 算法 排序 快速

问题描述 

现有一组数据:23,45,18,11,13,79,72,25,3,17,请使用快速排序算法将它们按照从小到大的顺序排列。

算法思想

(1)在无序数据中选一个基准数(通常为数据第一个);

(2)将数据中小于基准数的数据移到基准数左边,大于基准数的移到右边;

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

程序代码

#include<iostream>
using namespace std;
void quickSort(int* arr, int begin, int end)//arr:需要排序的数组,begin:需要排序的区间左边界,end:需要排序的区间的右边界
{
	if (begin < end)//如果区间不只一个数
	{
		int temp = arr[begin]; //将区间的第一个数作为基准数
		int L = begin; //从左到右进行查找时的“指针”,指示当前左位置
		int R = end; //从右到左进行查找时的“指针”,指示当前右位置
		while (L < R)//不重复遍历
		{
			while (L<R && arr[R] > temp)//当右边的数大于基准数时,略过,继续向左查找。
				                        //不满足条件时跳出循环,此时的R对应的元素是小于基准元素的
				R--;
			arr[L] = arr[R];//将右边小于等于基准元素的数填入右边相应位置
			while (L < R && arr[L] <= temp)//当左边的数小于等于基准数时,略过,继续向右查找。
				                           //(重复的基准元素集合到左区间)。
										   //不满足条件时跳出循环,此时的i对应的元素是大于等于基准元素的
				L++;
			arr[R] = arr[L];//将左边大于基准元素的数填入左边相应位置
		}
		arr[L] = temp;//将基准元素填入相应位置,此时的L即为基准元素的位置
		quickSort(arr, begin, L - 1);//对基准元素的左边子区间进行相似的快速排序
		quickSort(arr, L + 1, end);//对基准元素的右边子区间进行相似的快速排序
	}
	else  return;//如果区间只有一个数,则返回
}
int main()
{
	int num[10] = { 23,45,18,11,13,79,72,25,3,17 };
	int n = 10;
	cout << "排序前的数组为:" << endl;
	for (int i = 0; i < n; i++)
		cout << num[i] << ' ';
	quickSort(num, 0, n - 1);
	cout << "\n排序后的数组为:" << endl;
	for (int i = 0; i < n; i++)
		cout << num[i] << ' ';
	return 0;
}

标签:arr,end,int,基准,begin,算法,排序,快速
From: https://blog.csdn.net/weixin_63131750/article/details/137467943

相关文章

  • 贪心算法|1005.K次取反后最大化的数组和
    力扣题目链接classSolution{staticboolcmp(inta,intb){returnabs(a)>abs(b);}public:intlargestSumAfterKNegations(vector<int>&A,intK){sort(A.begin(),A.end(),cmp);//第一步for(inti=0;i<A.size......
  • 操作系统综合题之“采用动态分区分配算法下的3种算法(首次适应算法、循环首次适应算法
    一、问题:当空闲链如下图,第一个空闲分区起始地址为20KB,大小为120KB;第二个空闲分区起始地址为200KB,大小为100KB;第三个空闲分区起始地址为400KB,大小为60KB。若某进程P1先申请大小为30KB的内存空间,随后进程P2再申请大小为20KB的内存空间,画出给P1分配完之后的空闲链和给P2分配完......
  • 强化学习算法性能表现
    各算法在不同环境中的表现:来自天寿基准测试https://tianshou.org/en/stable/01_tutorials/06_benchmark.html1.HalfCheetah-v3SAC>DDPG>TD3>PPO>TRPO>NPG>ACKTR>A2C>REINFORCE2.蚂蚁v3SAC>TD3>A2C>PPO>......
  • Stream流sorted的多级排序问题(巨坑)
    https://blog.csdn.net/qq_28165595/article/details/131152763 前言之前在给一个List集合中对象进行多属性排序,比如先根据对象中的A属性正序排序,若两个对象的A属性值相同,再根据对象的B属性进行正序排序。这种排序在实际开发中比较常见,但是这里面有个坑。举个例子先初始化一个......
  • 自定义排序
    问题:按照A列的排序依据进行排序函数公式:=SORTBY(C2:D8,MATCH(C2:C8,A2:A8,))自定义序列排序:设置自定义序列(如需要): 选取A2:A8》文件》选项》自定义序列》导入自定义排序:选取数据》数据》排序》自定义排序……次序设置为自定义序列......
  • 因为算法不同,客户端与服务器无法通信。”的解决方法
    因为算法不同,客户端与服务器无法通信。”的解决方法sqlserver客户端远程sqlserver服务器 或是mstsc 最后根据微软文档的说明,改动注册表就成功了:传输层安全性(TLS)注册表设置|MicrosoftDocs在注册表编辑器,找到以下注册表项/文件夹:HKEY_LOCAL_MACHINE\SYSTEM\Curren......
  • Python算法学
    Python算法学习平台有很多,它们提供了丰富的资源和工具,帮助学习者从基础到高级的算法知识。以下是一些流行的Python算法学习平台:1.**LeetCode**:-网址:[https://leetcode.com/](https://leetcode.com/)-特点:LeetCode是一个非常受欢迎的在线编程平台,提供了大量的编程挑战,主......
  • CS202 WeensyOS 内存分配算法
    CS202:实验室4:WeensyOSCS202:实验室4:WeensyOS介绍在这个实验室中,您将在一个(但却是真实的!)操作系统,名为WeensyOS。这将向您介绍虚拟内存,并强化我们已经介绍过的一些概念学期WeensyOS内核在x86-64CPU上运行。因为操作系统内核运行在“裸”硬件上,所以调试内核代码可能很难:如果一个......
  • 常见的排序算法——插入排序
    本文记述了插入排序的基本思想和一份参考实现代码,并在说明了算法的性能后用实验进行了验证。◆思想将第一个元素之后的所有元素作为待排序范围,将前面的所有元素作为已排序范围。通过一一比较,逐个交换已排序范围内比第二个元素大的所有元素,使第二个元素被插入到了正确的位置。然......
  • ACTL5105人工智能算法
    ACTL5105分配到期时间:2024年4月15日星期日下午5点这是一项个人课业。总分为100分,占总分的20%球场标记。工作分配任务作为一名人寿精算师,你的任务是完成以下两项任务。任务I(25分)创建列出Ax、¨Ax、,2Ax、(IA)x和(IA¨)x假设excel文件“A-population-2020”中人群的年利率为5%。(说明:您......