【数据结构与算法】快速排序

news2024/11/13 14:46:31

快速排序目录

  • 一.快速排序的原理
  • 二.快速排序的图解
  • 三.快速排序的实现
    • 1.基准两边分
    • 2.分而治之
  • 四.完整代码

一.快速排序的原理

  • 每次选取第一个数为基准数.
  • 然后使用乾坤大挪移将大于或者小于基准的元素分别放置于基准数两边.
  • 继续分别对基准数两侧未排序的数据使用分治法进行处理,直到整个序列有序.

二.快速排序的图解

在这里插入图片描述
基准数就已经在有序的位置上了,开始两边分而治之.

在这里插入图片描述

三.快速排序的实现

1.基准两边分

low和high就是数组的下标的最左边和最右边.
选择最小的数为基准数.
分别左右两边依次比较,排好的就下次就不比较了.
直到i==j说明比较完毕.

int partition(int arr[], int low, int high)
{
	int i = low;
	int j = high;
	int base = arr[low];
	if (low < high)
	{
		while (i<j)
		{
			while (i<j&&arr[j]>base)
			{
				j--;
			}
			if (i < j)
			{
				arr[i] = arr[j];
				i++;
			}

			while (i<j&&arr[i]<base)
			{
				i++;
			}
			if (i < j)
			{
				arr[j] = arr[i];
				j--;
			}
		}
		arr[i] = base;
	}
	return i;
}

2.分而治之

不停的将基准数的两边进行快速排序.
在这里插入图片描述

四.完整代码

#include <iostream>
using namespace std;

int partition(int arr[], int low, int high)
{
	int i = low;
	int j = high;
	int base = arr[low];
	if (low < high)
	{
		while (i<j)
		{
			while (i<j&&arr[j]>base)
			{
				j--;
			}
			if (i < j)
			{
				arr[i] = arr[j];
				i++;
			}

			while (i<j&&arr[i]<base)
			{
				i++;
			}
			if (i < j)
			{
				arr[j] = arr[i];
				j--;
			}
		}
		arr[i] = base;
	}
	return i;
}

void QuickSort(int arr[], int low, int high)
{
	if (low < high)
	{
		int index = partition(arr, low, high);
		QuickSort(arr, low, index - 1);
		QuickSort(arr, index + 1, high);
	}
}

int main()
{
	int test[] = { 5,1,3,2,7,4,6,9,8,10 };
	int len = sizeof(test) / sizeof(test[0]);
	
	QuickSort(test, 0, len - 1);
	cout << "排序结果:" << endl;
	for (int i = 0; i < len; i++)
	{
		cout << test[i] << " ";
	}

	cout << endl;
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

2024年8月20日10:29:49

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

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

相关文章

计算机网络之IPv4深度解析

一.IP地址 IP地址的组成方式&#xff1a;网络号 主机号 可以这样理解&#xff0c;根据网络号找路由器&#xff0c;根据主机号找连着路由器的主机 早期分类的IP地址 表示如下&#xff1a; 其中&#xff0c;有些特殊的IP地址&#xff1a; 主机号全为0&#xff0c;表示本网…

CDD数据库文件制作(十一)——服务配置(0x19_DTC Code)

文章目录 1.新建DTC2.将DTC库中的DTC加载到Variant中3.19服务设置4.一些参数设置5.会话切换配置/安全等级配置6.寻址方式/禁止肯定响应位(SPRMIB)7.DTC Code 以文件形式进行导入导出1.新建DTC 先看一下诊断调查表中定义 如何创建一个新的DTC code? 选择DTC数据库点击新建DT…

Havoc C2 上线Windows 11

1、环境配置 Windows11 更新到最新补丁(文章编写时间&#xff1a;‎2023‎年‎8‎月‎)&#xff0c;安全软件打开 Kali更新&#xff1a; apt update -y && apt upgrade -y安装设置Havoc //下载项目 cd /opt && git clone https://github.com/HavocFramework…

百度 测试|测试开发 面试真题|面经 汇总

百度测开 开发测试工程师 提前批一二三面面经 事业群&#xff1a;MEG base&#xff1a;北京 一面&#xff1a;2022.8.12 时长&#xff1a;50min 自我介绍 个人项目&#xff0c;我的项目是围绕着学校课程的项目来的&#xff0c;面试官就让我介绍这门课讲了些什么 &#xf…

【vue】编辑器段落对应材料同步滚动交互

场景需求 编辑器段落对应显示材料编辑器滚动时&#xff0c;材料同步滚动编辑器段落无数据时&#xff0c;材料不显示 实现方法 编辑器与材料组件左右布局获取编辑器高度&#xff0c;材料高度与编辑器高度一致禁用材料组件的滚动事件获取编辑器段落距离顶部的位置&#xff0c;…

鸿蒙开发5.0【基于自定义注解和代码生成实现路由框架】

场景描述 在应用开发中无论是出于工程组织效率还是开发体验的考虑&#xff0c;开发者都需要对项目进行模块间解耦&#xff0c;此时需要构建一套用于模块间组件跳转、数据通信的路由框架。 业界常见的实现方式是在编译期生成路由表。 1. 实现原理及流程 在编译期通过扫描并解…

吴恩达机器学习-C2W3-应用机器学习的建议

在本实验中&#xff0c;您将探索评估和改进机器学习模型的技术。 1-调包 首先&#xff0c;让我们运行下面的单元格来导入在此任务中需要的所有包。 numpymatplotlibscikitlearntensorflow import numpy as np %matplotlib widget import matplotlib.pyplot as plt from skle…

模拟实现queue适配器【队列】【C++】

P. S.&#xff1a;以下代码均在VS2022环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …

私域经济的挖掘:多元渠道下的流量引爆方法

近年来&#xff0c;私域经济越来越受到品牌企业的青睐。基于个性化需求的私域市场&#xff0c;既有精准定位的成本优势&#xff0c;又有巨大的潜力空间。然而&#xff0c;想要把私域做成&#xff0c;其实也是充满了挑战&#xff0c;其中&#xff0c;怎样有效吸引流量&#xff0…

01、Redis入门:数据类型、基本操作、SpringDataRedis

Redis快速入门 Redis的常见命令和客户端使用 1.初识Redis Redis是一种键值型的NoSql数据库&#xff0c;这里有两个关键字&#xff1a; 键值型 NoSql 其中键值型&#xff0c;是指Redis中存储的数据都是以key、value对的形式存储&#xff0c;而value的形式多种多样&#xf…

错误信息“缺少msvcr120.dll”或“找不到msvcr120.dll”应该如何修复?几种方法快速修复

由于这个msvcr120.dll文件与应用程序的运行密切相关&#xff0c;任何与之相关的问题都可能导致应用程序无法正常运行。错误信息如“缺少msvcr120.dll”或“找不到msvcr120.dll”&#xff0c;通常出现在软件安装不正确或系统更新后。接下俩就教大家几种方法快速修复msvcr120.dll…

7 周岁自闭症儿童可以去普校上学吗?

对于许多自闭症儿童的家长来说&#xff0c;孩子能否去普通学校上学是一个至关重要的问题。而星贝育园给出了充满希望的答案。 星贝育园向家长郑重承诺&#xff0c;4 周岁之前开始干预可以 100%摘帽&#xff0c;即消除自闭症症状。在这里&#xff0c;为自闭症儿童提供个性化教学…

Spring源码解析(34)之Spring事务回滚流程

一、前言 在上一个篇章我们主要介绍了Spring事务的运行流程&#xff0c;也带着一步步debug看了整个事务的运行流程&#xff0c;但是还是欠缺了Spring事务的回滚的流程。 在上篇也主要介绍了Spring事务的传播特性&#xff0c;这里还是要看一下Spring事务的传播特性&#xff0c;因…

思博伦测试每秒最大新建、并发、吞吐

详细方法查看本文资源链接 一、最大新建测试说明 1、新建测试的主要目标是测试被测设备&#xff08;DUT&#xff09;的处理器能力。在单位时间内能够建立的连接数越多&#xff0c;说明被测设备的处理器的能力越强。 2、由于在测试过程中&#xff0c;我们只关心成功的建立TCP…

流动会场:定义新一代灵活空间的全新选择—轻空间

在当今快节奏的世界里&#xff0c;活动和会议的需求正变得越来越多样化和复杂化。无论是公司年会、大型宴会、还是各类演出和会议&#xff0c;场地的选择不仅需要满足功能需求&#xff0c;更要灵活、易于部署。正是在这样的背景下&#xff0c;“流动会场”这一创新概念应运而生…

反向沙箱是什么?如何使用反向沙箱保障上网安全

反向沙箱是什么&#xff1f; 反向沙箱是深信达的一种沙箱技术&#xff0c;又称SPN&#xff08;Sandbox Proxy Network&#xff09;沙箱。主要用于解决企业在安全上网过程中的风险问题。它通过在企业内部部署一个隔离的沙盒环境&#xff0c;实现安全的互联网访问&#xff0c;从而…

注意力机制(课程笔记)

一&#xff1a; 针对的问题 解决在循环卷积网络RNN模型中存在的信息瓶颈问题。 信息瓶颈&#xff1a; 举的是机器翻译的例子。在RNN中&#xff0c;Decoder的第一个输出取决于Encoder中的上一个输出&#xff0c;然后Decoder的其余输出都取决于上一个Decoder输出&#xff08;也就…

使用Nexus3为containerd和docker配置镜像代理

1.Nexus3介绍&#xff1a; Nexus3&#xff08;Nexus Repository Manager3&#xff09;是一个用于存储、组织和管理软件组件&#xff08;如 JAR文件、npm包、Docker镜像等&#xff09;的仓库管理系统。它由Sonatype开发并维护。Nexus Repository Manger支持许多流行的包管理工具…

免费仿微信聊天工具盒子IM

盒子IM是一个仿微信实现的网页版聊天软件&#xff0c;不依赖任何第三方收费组件。后端采用springbootnetty实现&#xff0c;web端使用vue&#xff0c;移动端使用uniapp&#xff0c;支持私聊、群聊、离线消息、发送图片、文件、语音、emoji表情、视频聊天等功能。包含pc端和移动…

Redis 技术详解

一、Redis 基础 &#xff08;一&#xff09;为什么使用 Redis 速度快&#xff0c;因为数据存在内存中&#xff0c;类似于 HashMap&#xff0c;查找和操作的时间复杂度都是 O(1)。支持丰富数据类型&#xff0c;支持 string、list、set、Zset、hash 等。支持事务&#xff0c;操…