首页 > 其他分享 >快速排序

快速排序

时间:2023-06-04 13:55:43浏览次数:31  
标签:tmp 遍历 start right 排序 快速 left

1.基本思想
快速排序的基本思想就是把数组中每个数放到排序后数组中恰当的位置。
找到一个数,把大于该数的元素全部放到这个元素的后面,把小于该数的元素全部放到它前面,以此方法遍历数组所有元素直到所有元素都放在合适的位置上。
2.算法实现
排序具体算法,假设要排序的数组是,array[10] = {4,5,7,3,9,1,2,4,0,6}
(1)先找到tmp=array[start]作为基准;
(2)再运用双指针left,right分别从前向后遍历,和从后面向前遍历,当left=right或者遇到大于tmp的元素时暂停移动,当right=left或者遇到小于tmp的元素时暂停移动。如果left<right,交换left和right所指的元素,继续遍历;
(3)否则停止遍历,此时left=right,是tmp在该排序数组中合适的位置,交换array[left]和array[start],开始下一轮遍历,递归遍历剩下的左右两部分,直到所有元素都遍历完。
完整代码:

点击查看代码
void quick_sort(vector <int>& arr,int start,int end)
{
	if(start>end)return ;  //终止条件 
	
	int left=start;
	int right=end;
	int tmp=arr[start];
	while(left<right)
	{
		while(left<right&&arr[right]>=tmp)
		{
			right--;       //右指针往前移动,当i=j或者遇到arr[]<tmp暂停 
	 	}
		while(left<right&&arr[left]<=tmp)
		{
			left++;        //左指针往后移动,当i=j或者遇到arr[]>tmp暂停 
		}
		
		if(left<right)
		{
			swap(arr[left],arr[right]);//交换两个元素,让大于tmp的数放后面,小于tmp的数放前面 
		}
	}
	swap(arr[left],arr[start]); // 此时left=right 是tmp在该数组中合适的位置 
	quick_sort(arr,start,left-1);
	quick_sort(arr,left+1,end);
}

3.复杂度
速排序最坏时间复杂度是O(n^2),最好的时间复杂度为O(nlogn),平均时间复杂度是O(nlogn)。
空间复杂度是O(1),因为没有用到额外空间。
4.稳定性
排序交换过程中不能保证相等的元素排序后的顺序不变,故是不稳定的。

标签:tmp,遍历,start,right,排序,快速,left
From: https://www.cnblogs.com/chenyg56/p/17455503.html

相关文章

  • webgpu_快速入门
    /Users/song/Downloads/WebGPU视频教程/1.WebGPU快速入门/9.三角形拼接矩形/2.三角形拼接矩形.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edg......
  • webgpu_快速入门2
    /Users/song/Downloads/WebGPU视频教程/2.3D几何变换数学基础/9.片元的屏幕坐标/1.片元坐标/index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE......
  • java基础知识之 算法 【冒泡排序】【快速排序】
     /**@auther:kevin@function:冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结......
  • ChatGPT使用小技巧—如何快速制作一张表格?
    ChatGPT使用技巧—如何快速制作表格?一、背景:        在学习或工作中,时常会需要做一些表格进行数据统计、分析,通常我们会用word或者excel做出表格,然后把数据一个个复制进去,非常慢,用了ChatGPT之后,你会发现工作会变得如此简单。二、所需工具    ChatGPT平......
  • linux 性能自我学习 ———— cpu 快速定位问题 [六]
    前言主要介绍一下cpu如何快速定位问题。正文cpu的一些性能指标:1.cpu使用率cpu使用率描述了非空闲时间占总cpu时间的百分比,根据cpu上运行任务的不同,又被分为用户cpu、系统cpu、i/o等待cpu、软中断、硬中断。用户cpu使用率,包括用户态cpu使用率,和低优先级用户态cpu使用......
  • 6.6 数组排序案例分析
    冒泡排序classArrayUtil{publicstaticvoidsort(intdata[]){for(intx=0;x<data.length;x++){for(inty=0;y<data.length-x-1;y++){//注意这里的-x-1含义;if(data[y]<data[y+1]){......
  • 通过DSL实现Elasticsearch数据排序功能
    普通字段排序语法:点击查看代码GET /indexName/_search{  "query": {    "match_all": {}  },  "sort": [    {      "FIELD": "desc"  // 排序字段、排序方式ASC、DESC    }  ]}示例:点击查看代码GET/hotel/_search{"q......
  • 使用vscode sftp插件快速上传源码文件
    1.首先安装vscode插件2.使用ctrl+shift+p或者view-commandpalette打开命令面板,输入sftp并按enter键,出现编辑配置文件界面3.输入对应的主机名,密码,或者密钥文件即可{"name":"47.100.101.152","host":"47.100.101.152","protocol":"sftp",......
  • 【python基础】复杂数据类型-列表类型(排序/长度/遍历)
    1.列表数据元素排序在创建的列表中,数据元素的排列顺序常常是无法预测的。这虽然在大多数情况下都是不可避免的,但经常需要以特定的顺序呈现信息。有时候希望保留列表数据元素最初的排列顺序,而有时候又需要调整排列顺序。python提供了很多列表数据元素排序的方式,可根据情况选用。1......
  • Neo4j图数据库快速使用
    针对这个项目中用到的技术组件,只有filebeat和neo4j我们没有使用过不过filebeat比较简单,类似于flume,在使用的时候主要是写配置文件,所以在后面用到的时候我们再具体分析。下面我们来学习一下neo4j的使用,快速了解它并掌握它的常见用法。Neo4j介绍Neo4j是一个高性能的图数据库,它和......