快速排序(看完就会)

news2024/11/18 13:56:39

目录

什么是快速排序

快速排序的步骤:

以上:

图片步骤简绘:

代码实现:


什么是快速排序

                快速排序是由C.A.R.Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,依次达到整个数据变成有序序列

快速排序的步骤:

                先给大家介绍一下算法中要用到的几个重要的标志

                        1、游标:f  b

                        2、标杆:t

                        3、L,R 区间范围

假设有一组数据,我们将第一个元素视为标杆,假设标杆是8,那么我们就可以开始第一次排序了

第一次排序最终是要实现8左边都是比8小的,8右边都是比8大的

f下标的元素如果比8小,游标就向右边进行移动,每次移动一个元素,直至f下标的元素比8大。则游标f停止移动

b下标的元素如果比8大,游标就向左边进行移动,每次移动一个元素,直至b下标的元素比8小,则游标b停止移动

当游标f,b都停止移动时,交换对应的元素

交换完成后继续重复以上的蓝色字体步骤

当游标f,b相遇并且交错的时候,交换标杆和游标b对应的元素、

以上:

        第一次排序结束,也就是说实现了8左边都是比8小的,8右边都是比8大的这一目标

此刻8左右两边各分成了左右区间,在对左右区间重复以上的排序步骤,也就是所谓的递归

直至区间中只有一个元素(区间中只有一个元素时,我们视为已序),则快速排序全部完成

图片步骤简绘:

 

 

代码实现:

#include <iostream>
#include <string>
using namespace std;
void _quick_sort(int arr[], int low, int hight);//核心递归函数
void quick_sort(int arr[], int size)
{
	_quick_sort(arr, 0, size - 1);//入口函数封装
}
void _quick_sort(int arr[], int low, int hight)
{
	//1、确定标杆 游标
	int t = arr[low];//标杆就是t,我们拿的第一个元素当成标杆
	int f = low + 1;//游标分别是f和b,f是左游标,b是右游标
	int b = hight;

	//2、设置递归结束条件
	if (low >= hight)//区间中最多只有一个元素-视为有序,也就是排序完成
		return;
		
	//3、开始划分大小区间
	int temp;//用于换成交换的变量
	while (f <= b)//f>b 说明区间搜索完成了
	{
		//3.1 移动游标
		while (f <= b&&arr[f] <= t) f++;//一直找到比标杆大的元素为止
		while (f <= b&&arr[b] >= t) b--;//一直找到比标杆小的元素为止
		//3.2 两个游标停了-交换
		if (f < b)
		{
			temp = arr[f];
			arr[f] = arr[b];
			arr[b] = temp;
			f++;
			b--;
		}
		//f>b 出循环 完成了分区
		//4、标杆归位 t和b进行交换
		//int t = arr[low];
		arr[low] = arr[b];
		arr[b] = t;

		//5、递归 标杆的位置在b
		_quick_sort(arr, low, b - 1);//递归左区间
		_quick_sort(arr, b + 1, hight);//递归右区间
	}
	
}
int main()
{
	int arr[]{8, 6, 1, 4, 5, 7, 2, 3};
	quick_sort(arr, 8);
	return 0;
}

 

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

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

相关文章

easypoi导出excel,列要求是数字导出是文本的问题~并分析源码

&#x1f4c3;目录跳转&#x1f4da;简介&#xff1a;实体类分析源码效果&#x1f4da;简介&#xff1a; 由于使用了easypoi导出的excel列需要是数字的但是导出的默认是文本类型&#xff0c;这样选择列就无法进行统计求和&#xff0c;由于没有认真看注解导致我跑去分析源码。所…

ssm校园兼职系统|求职招聘系统计算机专业毕业论文java毕业设计开题报告

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《ssm校园兼职系统》该项目采用技术&#xff1a;jsp springmvcspringmybatis cssjs等相关技术&#xff0c;项目含有源码、文档、配套开发软件、软…

《歌在飞》后蒙古包美女又一力作,《一路欢歌到北京》超然来袭

纵观中国华语乐坛&#xff0c;内蒙古音乐独树一帜&#xff0c;而要说到内蒙古的音乐人&#xff0c;就不得不提及苏勒亚其其格。说起著名音乐人苏勒亚其其格&#xff0c;她是一个地道的蒙古族人&#xff0c;如今是内蒙古乌兰牧骑独唱演员。 苏勒亚其其格是草原飞出的金凤凰&…

c++状态机的使用

什么是状态机 状态机是有限状态自动机的简称&#xff0c;是现实事物运行规则抽象而成的一个数学模型。英文名字叫State Machine &#xff0c;不是指一台实际机器&#xff0c;一般就是指一张状态转换图。全称是有限状态自动机&#xff0c;自动两个字包含重要含义。给定一个状态…

Pandas中使用Merge、Join 、Concat合并数据效率对比

在 Pandas 中有很多种方法可以进行dataframe(数据框)的合并。 本文将研究这些不同的方法&#xff0c;以及如何将它们执行速度的对比。 合并DF Pandas 使用 .merge() 方法来执行合并。 import pandas as pd # a dictionary to convert to a dataframe data1 {identificati…

配件厂商Hyper推出支持苹果Find My背包,背包防丢越来越智能

配件厂商 Hyper 今天推出了一款支持 Find My 的双肩包 HyperPack Pro&#xff0c;这样发生遗失或者失窃事件之后能够通过苹果的这项追踪技术快速锁定背包的位置&#xff0c;帮你快速找回。 背包有一个太阳镜口袋和易于拿取的前袋&#xff0c;此外背包上还有一个隐藏式口袋&am…

Github Student Developer Pack申请流程【不在学校的认证方法】

一、GitHub Student Developer Pack申请流程 首先你需要注册一个Github账号 进入GitHub Student Developer Pack申请页面&#xff0c;点击sign up for student developer pack 接着会出现如下图所示的界面&#xff0c;因为是学生&#xff0c;所以点击左下角的Get student ben…

Python打包神器,打包速度快生成文件小防反编译

分享一款打包速度快、生成文件小、更加安全的Python打包神器&#xff0c;本内容来源于网络。 一. pyinstaller和Nuitka使用感受 1.1 使用需求 这次也是由于项目需要&#xff0c;要将python的代码转成exe的程序&#xff0c;在找了许久后&#xff0c;发现了2个都能对python项目…

软件测试之系统测试总结报告

引言 编写目的 编写该测试总结报告主要有以下几个目的 通过对测试结果的分析&#xff0c;得到对软件质量的评价分析测试的过程&#xff0c;产品&#xff0c;资源&#xff0c;信息&#xff0c;为以后制定测试计划提供参考评估测试测试执行和测试计划是否符合分析系统存在的缺陷…

(附源码)Springboot中北创新创业官网 毕业设计 271443

Springboot中北创新创业官网 摘 要 进入21世纪以来&#xff0c;计算机有了迅速的发展。计算机应用、信息技术全面渗透到了人类社会的各个方面&#xff0c;信息化已成为世界经济和社会发展的大趋势。本文主要通过对中北创新创业官网的功能性需求分析&#xff0c;对系统的安全性和…

HTTP状态码206报错

HTTP状态码&#xff08;英语&#xff1a;HTTP Status Code&#xff09;是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的&#xff0c;并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。所有状态码的第一个数字代表了…

基于jsp+mysql+ssm富锦市业余足球联赛管理系统-计算机毕业设计

项目介绍 足球联赛管理系统主要目的是对足球联赛中心所有的足球联赛信息进行管理&#xff0c;并且合理管理好管理员发布球队、球员和比赛信息&#xff0c;会员浏览查看球队和比赛信息的流程。提高足球联赛管理的工作效率&#xff0c;降低管理的成本。本系统选用Windows作为服务…

Go-Excelize API源码阅读(四十一)——GetCellRichText

Go-Excelize API源码阅读&#xff08;四十一&#xff09;——GetCellRichText 开源摘星计划&#xff08;WeOpen Star&#xff09; 是由腾源会 2022 年推出的全新项目&#xff0c;旨在为开源人提供成长激励&#xff0c;为开源项目提供成长支持&#xff0c;助力开发者更好地了解…

加固技术护城河,比亚迪商用车加速领跑全球电动化进程

在10月召开的德国汉诺威国际交通运输博览会上&#xff0c;比亚迪首次发布全新刀片电池客车底盘技术平台。 随后的11月&#xff0c;比亚迪首款基于全新刀片电池客车底盘技术平台的新车型B12A03重磅亮相第四届LTA-UITP新加坡国际交通大会暨展览会。 据悉&#xff0c;B12A03是一…

Java 基础(继承)

继承基础1. 继承的特点2. super关键字3. 继承中变量访问特点&#xff08;就近原则&#xff09;4. 继承中成员方法访问特点5. 继承中构造访问特点为什么子类中所有构造方法默认都会访问父类无参构造方法。如果父类中没有无参构造6. 重写概述应用注意事项方法重写和重载有什么区别…

ssm的校园单车自行车租赁系统|租车系统计算机专业毕业论文java毕业设计开题报告

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《ssm的校园单车租赁系统》该项目采用技术&#xff1a;jsp springmvcspringmybatis cssjs等相关技术&#xff0c;前端页面使用了EasyUI框架&#…

【Redis】分布式锁基础

1. 集群下的线程并发安全问题 当项目形成集群时&#xff0c;每个 JVM 有一个锁监视器&#xff0c;这些锁监视器彼此间不互通&#xff0c;因此会出现集群下的线程并发安全问题&#xff0c;如下图所示&#xff1a; 2. 分布式锁 分布式锁是解决集群下的线程安全问题的方案&#…

Google Earth Engine(GEE)——image.select(...).rgbToHsv is not a function

本错误涵盖了好多错误,主要的原因就是函数不明确,不知道如何使用,以及函数的参数的设定,所以这里大家要先去看函数,另外,最主要的问题就是影像集合和影像要区分开,否则就会出现xxx is nor a function。这里我们用要注意!!! 提示: Line 9: image.select(...).rgbTo…

YApi跨域插件cross-request无法使用的解决方案

cross-request遇到的问题 最近在使用cross-request插件会收到一些报错信息&#xff1a; Manifest version 2 is deprecated, and support will be removed in 2023. See https://developer.chrome.com/blog/mv2-transition/ for more details. 以上信息是说Google推出了Man…

ADI的DSP开发软件:CCES软件的使用说明(很早期写的一点心得)

CCES 是 ADI 最新的 DSP 开发环境&#xff0c;全称是 Cross Core Embedded Studio&#xff0c;我从 2012 年的1.0.1 版开始使用&#xff0c;也曾经写过一个非常详细的软件安装文档&#xff0c;现在来详细的说一说 CCES 软件的使用操作。下面是我列出来的标题&#xff0c;一个一…