一、基础算法-快速排序

1.快速排序

快速排序主要利用了分治的思想,具体步骤为:
step1 确定分界点,常用为q[left],q[right],q[mid],也可以是随机的
step2 调整区间,将比分界点小的放左边,大的放右边
step3 利用递归处理左右两端

快排属于分治算法,分治算法都有三步:
分成子问题,递归处理子问题,子问题合并
模板c++:

void quick_sort(int q[], int l, int r)
{//递归的终止情况if(l >= r) return;//第一步:分成子问题int i = l - 1, j = r + 1, x = q[l + r >> 1];while(i < j){do i++; while(q[i] < x);do j--; while(q[j] > x);if(i < j) swap(q[i], q[j]);}//第二步:递归处理子问题quick_sort(q, l, j), quick_sort(q, j + 1, r);//第三步:子问题合并.快排这一步不需要操作,但归并排序的核心在这一步骤
}
do i++; while(q[i] < x);
会使得 q[l..i-1] <= x, q[i] >= xdo j--; while(q[j] > x);
会使得 q[j+1..r] >= x, q[j] <= xif(i < j) swap(q[i], q[j]);
会使得 q[l..i] <= x, q[j..r] >= x

在这里插入图片描述
在这里插入图片描述
题解

例题:
在这里插入图片描述
python解法:

def quick_sort(l,r):if l>=r: #递归的终止条件return i,j=l-1,r+1 #指针i,j指向左右两侧pivot=data[l+r>>1] #选择分界点while i<j:  #循环执行条件,左指针比右指针小while 1:  #不断循环直到找到比分界点值大的,等待放置在右边i+=1if data[i]>=pivot: #注意需要加上=号,因为如果两个值,2,1排序,会出现死循环breakwhile 1: #不断循环直到找到比分界点值小的,停下来,等待放左边j-=1if data[j]<=pivot:breakif i<j:  #满足条件左指针小,则交换data[i],data[j]=data[j],data[i]quick_sort(l,j) #递归处理左端quick_sort(j+1,r)
n=int(input())
data=list(map(int,input().split()))
quick_sort(0,n-1)
print(" ".join(map(str,data)))

C++解法:

#include <iostream>
using namespace std;
const int N=100010;
int q[N];
void quick_sort(int q[],int l,int r)
{if(l>=r) return;int i=l-1,j=r+1,x=q[l+r>>1];while(i<j){do i++; while(q[i]<x);do j--; while(q[j]>x);if (i<j) swap(q[i],q[j]);}quick_sort(q,l,j);quick_sort(q,j+1,r);
}
int main()
{int n;scanf("%d",&n);for(int i=0;i<n;i++) scanf("%d",&q[i]);quick_sort(q,0,n-1);for(int i=0;i<n;i++) printf("%d ",q[i]);return 0;
}

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

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

相关文章

ubuntu下利用ffmpeg工具将视频帧推流至rtsp

1、win10安装播放器 推荐安装 PotPlayer 64 bit。此播放器可以打开推流链接进行播放。 2、安装ffmpeg 建议在python环境中安装&#xff1a; 2.1、pip换清华源pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set global.trusted-hos…

Web攻防10_PHP反序列化_概念魔术方法POP链构造

文章目录 1、什么是反序列化操作&#xff1f; - 类型转换2、常见PHP魔术方法- 对象逻辑魔术方法概念常见魔术方法魔术方法与反序列化漏洞 3、反序列化安全漏洞原理&#xff1a;漏洞探针漏洞危害 4、反序列化漏洞利用- POP链构造反序列化常见起点反序列化常见跳板反序列化常见终…

html单页使用vue

html单页使用vue <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0, shrink-to-fitno, minimum-scale1.0, maximum-scale1.0, user-scalableno&q…

LeetCode 19. 删除链表的倒数第 N 个结点

LeetCode 19. 删除链表的倒数第 N 个结点 1、题目 力扣题目链接&#xff1a;19. 删除链表的倒数第 N 个结点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a; head [1,2,3,4,5], n 2 输出&am…

LeetCode 678——有效的括号字符串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 需要两个栈&#xff0c;一个用来保存左括号所在的位置索引&#xff0c;一个用来保存星号所在的位置索引。 从左往右遍历字符串&#xff0c;如果是左括号或者星号&#xff0c;则将位置索引分别入栈&#xff0c;如…

ELK——日志处理界的瑞士军刀

目录 引言 一、ELK简介 &#xff08;一&#xff09;基本概述 1.Elasticsearch服务 2.Logstash服务 2.2 logstash关键组件 2.2 logstash数据流向 3.Kibana服务 &#xff08;二&#xff09;ELK工作流程 &#xff08;三&#xff09;ELK的应用价值 二、部署搭建ELK &…

【Web】NSSRound#1-20 Basic 刷题记录(全)

目录 [NSSRound#1 Basic]basic_check [NSSRound#1 Basic]sql_by_sql [NSSCTF 2nd]php签到 [NSSCTF 2nd]MyBox [NSSCTF 2nd]MyBox(revenge) [NSSCTF 2nd]MyHurricane [NSSCTF 2nd]MyJs [NSSRound#3 Team]This1sMysql [NSSRound#3 Team]path_by_path [NSSRound#…

Spring MVC 中的适配器模式

文章目录 Spring MVC 中的适配器模式为什么不直接调用&#xff1f;解决方案一&#xff1a;统一 Controller解决方案二&#xff1a;使用适配器模式DispatcherServlet 对 Adpater 的使用 Spring MVC 中的适配器模式 为什么不直接调用&#xff1f; DispatcherServlet 为什么不直…

【入门】时钟旋转

时间限制 : 1 秒 内存限制 : 128 MB 时钟上面的时针从m时走到n时旋转了多少度&#xff1f;&#xff08;m<n&#xff0c;且m和n都是1~12之间的整数&#xff09; 输入 2个整数m和n 输出 一个整数代表时针旋转的度数 样例 输入 1 4 输出 90 提示 基础问题 #includ…

Python爬取天气信息,并进行语音播报

1、涉及的主要库 requests&#xff1a;requests 是一个Python的HTTP库&#xff0c;用于发送HTTP请求和处理响应。它是基于Python的 urllib 和 httplib 库的封装&#xff0c;提供了更加简洁、易用的接口&#xff0c;使得发送HTTP请求变得更加方便。你可以使用 requests 库来获取…

SQL语法 case when语句用法讲解

CASE WHEN解释 &#xff1a; SQL中的CASE WHEN语句是一种条件表达式&#xff0c;它允许你根据不同的情况返回不同的值。CASE WHEN通常用于SELECT语句中&#xff0c;用于创建新的列&#xff0c;该列的值取决于其他列的值。CASE WHEN可以用于任何可以使用表达式的地方。 大致概…

JavaScript模块化:CommonJS、AMD与ES模块化

JavaScript模块化&#xff1a;CommonJS、AMD与ES模块化 随着Web应用程序变得越来越复杂&#xff0c;JavaScript代码的组织和管理变得越来越重要。为了解决这个问题&#xff0c;JavaScript社区引入了模块化编程的概念。本文将详细介绍三种主要的JavaScript模块化规范&#xff1…

二叉树和数据结构

小红的完全二叉树构造 题目描述 小红想构造一个总共 n 个节点完全二叉树&#xff0c;该二叉树满足以下两个性质&#xff1a; 1. 所有节点的权值值为 1 ~ n 的一个排列。 2. 除了根节点以外&#xff0c;每个节点的权值和它父亲的权值的乘积为偶数。 请你帮小红构造出这个二叉树…

three.js捋文档的记录笔记(五):threejs引入

地址1&#xff1a;http://www.webgl3d.cn/pages/aac9ab/ 地址2&#xff1a;http://www.webgl3d.cn/Three.js/ &#xff08;作者&#xff1a;郭隆邦 该说不说 大佬真牛 整的教程通俗易懂还详细&#xff09; 本地静态服务器 vscode配置live-server插件 在官网案例里打开对应.ht…

K8S一 k8s基础知识及实战

一 K8S 概览 1.1 K8S 是什么&#xff1f; K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ K8S 是Kubernetes的全称&#xff0c;源于希腊语&#xff0c;意为“舵手”或“飞行员”&#xff0c;官方称其是&#xff1a;用于自动部署、扩展和管理“容器化&#xff08…

软考 系统架构设计师系列知识点之大数据设计理论与实践(5)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之大数据设计理论与实践&#xff08;4&#xff09; 所属章节&#xff1a; 第19章. 大数据架构设计理论与实践 第3节 Lambda架构 19.3.1 Lambda架构对大数据处理系统的理解 Lambda架构由Storm的作者Nathan Marz提出&…

目标检测与图像分类的区别(概念)

目标检测和图像分类是计算机视觉领域的两个重要任务&#xff0c;它们有一些关键的区别&#xff1a; 1、任务目标 图像分类&#xff1a;图像分类的任务是将输入的图像分为不同的类别&#xff0c;通常是预定义的类别集合。在这种任务中&#xff0c;算法的目标是确定图像中包含的…

伺服系统中电机磁极偏角自学习的实现方案

一、 电机磁极偏角自学习原理简述 要知道磁极偏角&#xff0c;首先要明确的是磁极角&#xff0c;在我个人的理解里磁极角就是park和Ipark变换里所需的电角度&#xff0c;我们的矢量控制方法是定磁链的&#xff0c;就是要保证两相同步旋转坐标系的Id轴和三相静止坐标系的A轴要重…

45---M.2 SSD电路设计

视频链接 M.2 SSD硬件电路设计01_哔哩哔哩_bilibili M.2 SSD电路设计 1、M.2简介 1.1、M.2基本介绍 M.2接口也叫NGFF&#xff0c;英文全称Next Generation Form Factor。M.2接口是为超极本&#xff08;Ultrabook&#xff09;量身定做的新一代接口标准&#xff0c;是Intel推…

nginx优化总结及系统内核优化

一、nginx优化 1. 性能优化&#xff1a; 需求内容实现IO多路复用use epoll;设置工作进程数worker_processes 与CPU数量相同或auto;工作进程静态绑核worker_cpu_affinity设置并发worker_connections worker_rlimit_nofile连接保持超时keepalive_timeout 服务器超时时间 [客户端…