快速排序的三种方法 hoare,挖坑法,前后指针法

news2024/11/24 20:00:02

文章目录

  • 快速排序的整体介绍
  • hoare
    • 思路
    • 代码实现
  • 挖坑法
    • 思路
    • 代码实现
  • 前后指针法
    • 思路
    • 代码实现

快速排序的整体介绍

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。它可以先写出一趟快排,再使用递归的算法进行下一趟的排序,把left和right区间划分为了三个部分
[left keyi-1] keyi [keyi+1,right]。
每次排序,keyi的值改变就会变化,把区间分割的越来越小,每个区间再使用一趟快排,整个区间就会有序。递归条件为区间里的数字个数剩余一个和没有区间。[left keyi-1] 和 [keyi+1,right]递归排序,把l如下图所示:
在这里插入图片描述

hoare

思路

在这里插入图片描述

思路:定义两个指针,让right先走,找到比key值小的和left的值交换,然后left走找到大的和key的值交换。直至key左边的值是小于key的,在key右边的值是大于key的。这里需要讨论为什么先让R走。而不是先让left走。我们先来把过程图画一画:
在这里插入图片描述
hoare版本的说明:
在这里插入图片描述

代码实现

//hoare版本
int PastSort1(int* a, int left, int right)
{
	//选取key为最左边的值。
	int keyi = left;
	//left和right相遇后就不会进入循环
	while (left < right)
	{
		while (left<right && a[right] >= a[keyi]) //我们还得考虑右边的值都是大于key和left或者right所指向的值相等的情况。
		{
			right--;
		}
		while (left<right && a[left] <= a[keyi])
		{
			left++;
		}
		//交换最大值和最小值
		Swap(&a[left], &a[right]);
	}
	//左右指针相遇后一定是比key小的值。
	//把key和left的值交换
	Swap(&a[left], &a[keyi]);
	return left;
	
}


void QuickSort(int* a, int left, int right)
{
	if (left > right)
	{
		return;
	}
	int keyi = PastSort1(a, left, right);
	//把left和right区间分为了左右两个区间
	//[left keyi - 1] keyi[keyi + 1, right]
	//然后调用递归算法让他们排序。
	QuickSort(a, left, keyi - 1);
	QuickSort(a, keyi+1, right);
}

挖坑法

思路

先找出key的位置为keyi 然后找到比key小的值交换,keyi的位置产生一个坑然后找到最大的
在这里插入图片描述

代码实现

//挖坑法
int PastSort2(int* a, int left, int right)
{
	//选取key为最左边的值。
	int key = a[left];
	int hole = left;
	while (left < right)
	{
		while (left < right && a[right] >= key)
		{
			right--;
		}
		//从右边找到比key小的填坑
		a[hole] = a[right];
		hole = right;
		while (left < right && a[left] <= key)
		{
			left++;
		}
		//从左边找到比key大的填坑
		a[hole] = a[left];
		hole = left;
	}
	a[hole] = key;
	return hole;
}

前后指针法

思路

在这里插入图片描述

代码实现

//前后指针法
int PastSort3(int* a, int left, int right)
{
	int keyi = left;
	int prev = left;
	int cur = left + 1;

	while (cur <= right)
	{
		if (a[cur] < a[keyi])
		{
			Swap(&a[++prev], &a[cur]);
		}
		cur++;
	}
	Swap(&a[prev], &a[keyi]);
	return prev;
}

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

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

相关文章

spring data jpa(概述、快速入门、内部原理剖析、查询使用方式)

一、概述 1.1 Spring Data JPA概述 Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架&#xff0c;可使开发者用极简的代码即可实现对数据库的访问和操作。 它提供了包括增删改查等在内的常用功能&#xff0c;且易于扩展&#xff01;学习并使…

Hexo博客部署腾讯云服务器

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 前端相关 ✨特色专栏&…

ModaHub魔搭社区:AI原生云向量数据库MIlvus Cloud的倒置文件索引?

目录 VF 总结 VF 平面索引很不错,但它无法扩展。这就是向量搜索的数据结构发挥作用的地方。通过牺牲准确性来减少运行时间,以便显著提高查询速度和吞吐量。现在有很多索引策略,其中最常用的是倒置文件索引(IVF)。 抛开花哨的名字,IVF 实际上是相当简单的。IVF 通过将…

用C语言进行学生成绩排序(选择排序)

一.选择排序 选择排序的基本思想是:每一趟(如第i趟)在后面n-i1 (i1,2…,n-1) 个待排序元素中选取关键字最小的元素&#xff0c;作为有序子序列的第i个元素&#xff0c;直到第n-1趟做完&#xff0c;待排序元素只剩下1个&#xff0c;就不用再选了。选择排序中的堆排序算法是历年考…

Vue数据项加圆点

目录 Html 样式 方法 Html <el-table-column prop"status" label"数据状态" header-align"center" width"200"><template slot-scope"scope"><div style"display: flex; justify-content: center; a…

六大组件助力大屏一键升级!老板当场拍案叫绝!

上个礼拜参加高中同学聚会&#xff0c;大家在饭桌上聊自己的工作&#xff0c;各自吐槽后发现大家真的是各有各的不容易&#xff01;有个和我一样做数据分析工作的兄弟&#xff0c;喝了点小酒后&#xff0c;情绪上头直接在饭桌上大吐苦水&#xff0c;疯狂diss他领导。 他说本来…

java项目之二手车交易网站(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的二手车交易网站。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&a…

【图形学入门】概述(Overview)

本文基于GAMES 101课程进行记录和总结。 概念 计算机图形学&#xff08;Computer Graphics&#xff0c;俗称CG&#xff09;&#xff0c;是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学&#xff08;或使用计算机合成和操作视觉/图像图形的信息&#xf…

【Linux操作系统】多线程初步概念

文章目录 多线程初步概念线程的优点线程的缺点线程异常线程用途Linux进程VS线程 多线程初步概念 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”。一个进程至少都有一个执行线程。线程是一…

pandas 笔记 style 调整DataFrame格式

1 format 1.0 数据 # Visual Python: Data Analysis > File vp_df pd.read_csv(https://raw.githubusercontent.com/visualpython/visualpython/main/visualpython/data/sample_csv/iris.csv) vp_dfvp_df[:5] vp_df.at[0,sepal_length]np.nan vp_df.at[2,sepal_length]10…

进程和线程的本质区别

前几天有个同学问我&#xff0c;为什么electron是多进程而不是多线程&#xff1f;今天总结一下&#xff0c;对这个问题做下解答。 首先我们先了解下进程的概念&#xff1a;进程是计算机分配资源的最小单位。 简单地说&#xff0c;进程是一个容器。比如一间漂亮的小别墅&#x…

asp.net core框架搭建1-搭建webapi,对数据增删改查接口模板(附源码)

文章目录 系列文章1.项目搭建1.1 新建Asp.net core webapi项目1.2 配置连接Mysql1.3 实现对mysql数据库的数据增删改查&#xff0c;接口1.3.1 根据id查询数据1.3.2 根据用户名模糊查询数据&#xff0c;并分页1.3.3 新增用户数据1.3.4 修改用户数据1.3.5 根据ID删除数据1.3.6 接…

针对工业网络攻击的五个关键控制措施

人们普遍持有一种过时的误解&#xff0c;认为成功的网络攻击只会造成信息和数据损坏或窃取信息和数据。 但随着互联性的增强和物联网的兴起&#xff0c;存在一种不同类型的网络威胁&#xff0c;其动机更加险恶&#xff0c;对关键民用基础设施造成物理损害&#xff0c;并可能造…

VTS表格数据查看与转换

说明 vts是由formula one生成的文件后缀名&#xff0c;它兼容中文&#xff0c;具备类似EXCEL的功能&#xff1a;如格式编排、制作表格线、移动和复制单元格、单元格的计算、画简单框图等等。 查看与转换 直接执行脚本&#xff0c;自动注册ttf16.OCX&#xff0c;打开TTF1.ex…

Java版本企业电子招投标采购系统源码——功能模块功能描述

功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外部供…

第十一章:C语言数据结构与算法初阶之排序

系列文章目录 文章目录 系列文章目录前言排序的概念及其运用排序的概念常见的排序算法 常见排序算法的实现1.直接插入排序2. 希尔排序&#xff08;缩小增量排序&#xff09;3. 直接选择排序4. 堆排序5. 冒泡排序6. 快速排序将区间按照基准值划分为左右两半部分的常见方式&#…

为Kubernetes(k8s)集群安装仪表盘(Dashboard)

为Kubernetes集群安装仪表盘 文档说明部署仪表盘(Dashboard UI)访问 Dashboard 用户界面 文档说明 对应本片文章的视频教程地址&#xff1a;https://www.bilibili.com/video/BV1MF41197RS/?vd_source98deeeab6739fa30792cfcffa994b50e 在之前的文章当中我们搭建了一个kubern…

Spring接收前端传递数据的方式

搭建项目 然后点击下一步完成即可搭建成功 在pom文件中导入lombok的jar包,帮助我们快速创建实体类 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version> </dependency&…

腾讯云服务器CPU处理器大全_性能测评

腾讯云服务器CPU采用什么处理器型号&#xff1f;主频睿频多少&#xff1f;腾讯云服务器CPU性能如何&#xff1f;云服务器CVM规格不同CPU型号也不同&#xff0c;轻量应用服务器的CPU处理器性能如何&#xff1f;腾讯云服务器网分享腾讯云服务器CPU处理器大全&#xff1a; 目录 …

Win10+Anaconda+RTX3070+Pytorch-GPU深度学习环境搭建

一、CUDA安装 1. 查询CUDA driver版本&#xff1a; 2. 下载并安装&#xff1a; CUDA Toolkit Archive | NVIDIA DeveloperPrevious releases of the CUDA Toolkit, GPU Computing SDK, documentation and developer drivers can be found using the links below. Please sele…