算法设计与分析——递归与分治策略——快速排序

计算机算法设计与分析观后小总结 这几天简单的看了一遍王晓东的《计算机算法设计与分析》,很多地方没有细看,现在先做个小总结,方便以后回头看的时候记忆起一些内容。 第二章:递归与分治策略 递归的概念: 直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。 分治法的基本思想: 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题, 阅读详情

快速排序——递归算法
处理i,j的先后顺序不能改变
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
在这里插入图片描述
函数:
partition()函数实现了根据数组第一个元素区分这个数组,比这个元素小的放到mid的前面,比这个元素大的放到mid的后面
quicksort()函数:实现了递归调用

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
vector<int> vec;
int partition(vector<int> &vec,int left,int right);
void QuickSort(vector<int> &vec,int left,int right)
{
	if(left<right)
	{
		int mid = partition(vec, left, right);
   	 	QuickSort(vec, left, mid-1);
    	QuickSort(vec, mid + 1, right);
	}
    

}
int partition(vector<int> &vec,int left,int right)
{
    int i=left, j=right;
    int temp = vec[left];
    while(i<j)
    {
        while(temp<=vec[j]&&i<j)//处理i,j的先后顺序不能改变 
        {
            j--;
        }
        while(vec[i]<=temp&&i<j)//处理i,j的先后顺序不能改变 
        {
            i++; 
        }
			swap(vec[i],vec[j]);
    }
    vec[left] = vec[j];
    vec[j] = temp;
    return j;

}

int main()
{
    vector<int> vec={6,1,2,7,9,3,4,5,10,8};
    cout<<"排序前的序列:";
	 
    for (auto a:vec)
    {
        cout << a<<" ";
    }
    cout<<endl<<"排序后的序列:";
    int count = vec.size()-1;
    QuickSort(vec, 0, count);
    for (auto a:vec)
    {
        cout << a<<" ";
    }
    cout<<endl;
        system("pause");
	return 0;
}

在这里插入图片描述

算法详解(三)--递归与分治 本模块系统讲解C++中的递归与分治算法。核心内容包括递归三要素(边界条件、递归定义、递推关系)和调用栈机制,通过阶乘计算和汉诺塔问题展示递归思维。重点分析了递归优化技巧,如尾递归转循环、记忆化搜索避免重复计算(斐波那契数列案例),以及回溯算法在全排列问题中的应用。模块强调将复杂问题分解为相同形式的子问题,并通过递归调用栈和分治策略高效解决,同时指出递归可能存在的效率陷阱及优化方案。 阅读详情

相关推荐

广东工业大学算法设计与分析基础试卷解析

本文还有配套的精品资源,点击获取 简介:《算法设计与分析基础》试卷是广东工业大学为检验学生算法理解、设计和分析能力而设计的考试题。本试卷着重于算法在解决实际问题中的应用,涵盖从排序、查找、图论到动态规划等关键知识点,并强调算法效率和数据结构的应用。学生通过学习和解答试卷上的题目,能够提升编程素养和解决实际问题的能力。 1. 排序算法及时间复杂度分析 在计算机...

weixin_30591519的博客 1635

几种常见的排序的算法 C++

1.归并排序: 归并排序利用了递归的思想(以及分而治之的思想),将数组一分为二(0~mid),(mind+1~end)左右两个子数组,最后将两部分合并起来。 整体算术法时间复杂度为O(nlogn), 空间复杂度O (n) 。 #include<bits/stdc++.h> using namespace std; //归并过程 void merge(int arr[], in...

qq_35692267的博客 294

算法设计与分析实验一快速排序

主要实验内容及要求: 1. 要求按快速排序原理实现非减序排序; 2. 待排数据可键盘输入,也可读文本文件输入; 3. 键盘输入时待排数据个数由输入确定,文件输入时数据格式如下所示; 4. 排序时不能移动数据; 5. 要求显示排序结果。 输入数据的文本文件格式:第1行为数据个数,第2行开始每行一个数据。 如:data.txt 14 19.4 30.43 26.88 7.62 有14行 ┋ 12.7 21.9

快速排序(代码+详细分析)

基本思想: 任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右 子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。 图解: 假设有下列一组数据,此时规定每次分割选定当前序列最右侧的数值为基准值,那么第一次的基准值为3,分割为两个子序列后,在分别选定子序列最右侧的数据为基准值,再重复上述过程,就完成了排序。 代码: 分析上述过程,需要一个将数组进行分割的函数,我们只需要想

Enthusiastic_boy的博客 1万+

Ubuntu20.04系统Cuckoo sandbox所需环境搭建及安装(超详细图文)

请勿叫我大神,我只是互联网的搬运工~ 前言 本教程以Ubuntu20桌面版作为示范,服务器版同样适用,但可能稍微麻烦一点,服务器版本的话安装Xmanage套装使用可能会相对轻松一些,由于后面会使用到vbox的使用,对vbox命令行操作不熟悉的小伙伴用xmanage可能会相对轻松一点。 提示:以下是本篇文章正文内容,下面案例可供参考 安装ubuntu20桌面版 步骤1:转到https://ubuntu.com/download/desktop下载下载.iso。 步骤2:使用您选择的虚拟机监控程序(VMWa

ElsonHY的博客 1万+

告别路径打架!用Python实现CBS算法搞定仓库机器人调度(附完整代码)

本文详细介绍了如何使用Python实现CBS(Conflict-Based Search)算法解决仓库机器人调度中的路径冲突问题。通过多智能体路径规划(MAPF)技术,有效避免AGV在智能仓库中的碰撞和死锁,提供完整代码实现和工业场景优化技巧,帮助开发者快速构建高效的机器人调度系统。

weixin_30275415的博客 328

快速排序算法(含详细代码和算法分析)

/* 基本思想 { 交换排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。(冒泡,快速排序) 快速排序步骤(升序为例): { 基本思想:基于分治法,在待排序表L[1..N]中任取一个元素pivort,作为枢轴(通常取首元素),通过一趟排序将待排序表划分为独立的两部分,使得左边的元素值都小于枢轴元素, 右边的元素值都大于枢轴元素值,则将枢轴元素放到对应位置上,分别递归对左右两个独立的子表重复上述操作。直到每部分只有一个元素为止。 }

Loser5的博客 996

量化金融笔记1-股票量化基础

股票量化基础 文章目录什么是股票股票的定义及其诞生所解决的问题股票的主体和流通股票的常规分类股票价格收益率什么是股票价格的收益率股票价格收益率计算在python中的实现两种收益率算法的特点及应用场合股票交易规则场内交易与场外交易A股、B股、H股国内多层次的资本市场股票交易指令和撮合机制股票交易时间股票交易成本股票复权股票数据介绍与提取行业分类和指数行情数据因子数据标的数据基本面数据 什么是股票 股票的定义及其诞生所解决的问题 股票的定义:股票是一种有价证券,是股份有限公司公开发行的用以证明投资者的股东身份

折桂狂人的博客 2395

快速排序算法讲解及代码(详细)

快速排序算法一、序言二、快速排序基本思想三、具体步骤四、具体代码 一、序言 快速排序是一种高效且使用广泛的排序算法,在很多语言的标准库中自带的排序都是快速排序。所以我们也有必要了解快排的原理以及实现方法。 二、快速排序基本思想 算法思想:快速排序实现的重点在于数组的拆分。通常我们将数组的第一个元素作为比较元素,然后将数组中小于比较元素的数放到左边,将大于比较元素的放在右边。 这样我们就将数组拆分成了两部分:小于比较元素的数组和大于比较元素的数组。我们再对这两个数组进行相同的拆分。直到拆分到不能再拆分,

qq_46186025的博客 7085

第一节:从Chat_Bot 到 AI_Agent——一个范式转换

本文系统剖析了工业级AI代理系统ClaudeCode的设计原理与工程实践。通过对比ChatBot与Agent的三个本质差异:自主循环决策vs单轮应答、环境交互vs纯文本I/O、持久状态管理vs无状态对话,揭示了构建生产级Agent系统的关键挑战。文章详细解析了ClaudeCode的五层架构设计、1800+文件组成的运行时系统,包括工具调度、权限管理、状态持久化等核心机制,并阐述了从简单API调用到完整Agent系统的演进路径。

2201_75869398的博客 67

从零学懂车载 TSN(二):802.1AS、Qbv、Qbu 是如何让 Ethernet “按时发送”的?

假设有两台设备: ECU A 认为: 但 Switch B 认为: 如果我们规定: 问题就来了。ECU:Switch:整个调度立即失效。因此 TSN 要做时间调度,第一件事就是:这就是:IEEE 802.1AS 定义时间敏感网络里的:工程中通常会看到:gPTP也就是:generalized Precision Time Protocol可以先简单理解成: 核心表达:所有 TSN 节点使用共同时间。后面抓包时你会经常遇到: 刚入门时不用急着研究每个 bit。先搞清楚它们解决什么问题。两个设备连接: A 需要知

struggle_22_58的博客 49

算法设计与分析第二章:递归与分治策略

主定理—递归式求解 主定理:设a>=1,b>1和d>=0,设f(n)为一函数,T(n)由递归式 , 那么 1>.如果, 2>.如果, 3>.如果, 分治法经典范例 1>二分搜索 该问题的常见形式是在一个有序数组中寻找某个元素。假设数组array[ ]存储升序序列,变量left表示查找范围的左边界,right表示查找范围的有边界,mid表示查找范围的中间位置,target为要查找的元素。用分治法实现过程如下:    1>初始化。令le...

m0_50695845的博客 995

FM20S用户手册--Linux系统启动卡制作及系统固化

评估板出厂时,默认提供一张配套的Micro SD卡,此卡为可正常使用的Linux系统 启动卡。评估板断电,将Linux系统启动卡插入评估板Micro SD卡槽,根据评估底板丝印将 启动方式选择拨码开关拨为1010(1-4).此档位为Micro SD启动模式。使用Linux 系统启动卡启动系统时,将使用此目录的BOOTbn文件启动FSBL和U-Boot。Linux系统启动卡制作时,已将固化系统的脚本文件mkemmcboot.sh拷贝至Linux系 统启动卡文件系统的"/opt/tools/"目录下。

创龙,嵌入式一体化解决方案商 301

算法设计: 二、递归与分治策略 (2. 快速排序、快速排序随机基准算法)—— java实现 - 算法分析

分治法基本思想 将一个规模为 n 的问题分解为 k 个规模较小的问题,这些子问题相互独立且与原问题相同。递归地解这些子问题,然后将各子问题的解合并得到原问题的解。 1、快速排序算法(运用了二分搜索技术) 2、Hanoi 塔问题 ...

demo_yo的博客 630

Unity如何实现数字人口型同步

SALSA LipSync v2是一款实时唇音同步系统,无需音素映射即可根据音频自动生成口型动画。系统提供三大核心功能:基于音频波形分析的智能口型同步、EmoteR表情随机化工具以及Eyes眼睛/头部追踪系统。配置流程简单快捷,只需导入模型后通过一键配置完成基础设置,再添加A/E/I/O/U等基本口型混合变形即可实现基础功能。进阶功能支持表情池管理(手动/随机/强调/重复触发)和眼部动作配置(骨骼旋转或混合变形)。系统支持三种输入方式:本地音频文件分析、麦克风实时输入和文本转语音,为数字人角色提供完整的表情

TxNet 760

【论文硬核拆解】Ctx2Skill:让大模型自己跟自己玩,从上下文里「进化」出可复用技能

论文选择自然语言技能可解释性:技能是人类可读的 Markdown 文件,可以审查、编辑、调试可迁移性:即插即用,从一个模型到另一个模型无需参数访问:对闭源模型友好这比 SKILL0/SkillRL 等参数内化方法更实用,尤其是在商业 API 场景。

步子哥的博客 152

算法设计与分析3——递归分治策略

分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 可行性:如果原问题可分割成k个子问题(1<k≤n),且这些子问题都可解,并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。 一、递归算法:程序直接或间接调用自身的编程技巧 1、优点:一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大...

qq_43236424的博客 475

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

算法设计与分析之“分治法”

有关算法设计中分治法的详细介绍,欢迎观看。

2401_83201682的博客 1041

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

计硕3班-陈陇刚-2022222278-第二章 递归与分治策略 作业

递归是一种解决问题的有效方法,在递归过程中,函数将自身作为子例程调用。递归的思想是把一个大型复杂问题层层转化为一个与原问题规模更小的问题,问题被拆解成子问题后,递归调用继续进行,直到子问题无需进一步递归就可以解决的地步为止。分治法,字面意思是“分而治之”,就是把一个复杂的1问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并,这个思想是很多高效算法的基础,例如排序算法(快速排序,归并排序),傅里叶变换(快速傅里叶变换)等。

GUIDchen的博客 529

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数据结构预算法分治策略

分治策略是计算机科学中一种重要的问题解决方法,其核心思想是将一个复杂的问题分解成两个或更多的相同或相似的子问题,直到子问题简单到可以直接求解,然后再合并这些子问题的解以得到原问题的解。这种策略在数据结构和算法设计中广泛应用,能够有效解决许多复杂的计算问题,如排序、搜索和数学计算等。分治算法通常通过递归来实现,但也可以使用迭代方法。它的效率往往高于暴力解法,尤其在处理大规模数据时优势明显。例如,快速排序和归并排序都是分治策略的经典应用,它们通过将数组分成较小的部分分别排序,然后再合并,实现了高效的排序。

Cyanssy的博客 645

算法设计与分析---递归与分治

算法设计与分析—递归与分治 问题一,输出全排列(不按照大小输出,要求使用递归不使用回溯) input: 输入一个正整数(不要太大,递归层数稍微一多就超时!!!) output: 输出1----n的全排列 input_case: 3 output_case: 123 132 213 231 321 312 思路: 递归一定要找好递归边界与递归关系!!! 设置函数P(int *a,int k,int n); k从0开始计数,k到达问题边界就输出一下; k没到边界开始,分别以每一个元素作为前缀进行递归输出!

雪岩的博客 1037

分治法:算法思想与应用实例

分治法是一种强大的算法设计策略,通过将复杂问题分解成若干个子问题,并递归地解决这些子问题,最终将子问题的解合并成原问题的解。希望你喜欢这篇文章!如果有更多问题,欢迎随时提问。

m0_64974617的博客 1970

第二章、递归与分治策略

第二章、递归与分治策略 二分搜索算法的时间复杂度、大整数乘法、Strassen矩阵乘法、合并排序和快速排序、线性时间选择、最接近点对问题、循环赛日程表。 重点掌握: 递归方程的解(公式法): 分治法的复杂性分析: 其中必须明确n(表示原问题的规模)、m(表示原问题分解为k个子问题后,规模为n/m)、f(n)(表示分解和合并子问题的时间) ########内容############## 二分搜索算法的时间复杂度 2. 大整数乘法(分治法的复杂性分析) 问题导入: 解析: ...

Senye_ing的博客 207

C++递归与分治算法原理示例详解

② 对 n - 1 个数进行同样的递归操作,当交换的第一个数的下标 k 和 序列末尾的 m 相同时,说明前置所有数都已经交换完成,进行输出。① 从 n 个数中取出数列的第一个数,然后不断将数列中剩余的数与第一个数进行交换,计算剩余 n-1 个数的全排列。,rn}是要进行排列的n个元素,求R的全排列Perm(R)。递归算法,分为 3 步:将 n 个 a 上的盘子借助 c 移动到 b。① 将 n-1 个 a 上的盘子借助 b 移动到 c。③ 将 c 上的 n-1 个盘子借助 a 移动到 b。

raoxiaoz0425的博客 137

2.递归分治策略

程序之间或者间接调用自身的程序1.斐波那契数列。

2301_81873056的博客 265

算法设计与分析--期末复习重点总结

本文采用流行的c++语言作为算法描述手段,文中所列算法均已上机调试过。内容包括算法概要,递归与分治,动态规划,贪心算法,回溯法,分支限界法,随机算法。后续内容在一个月内更新,敬请期待。

qq_62795094的博客 1万+
上一篇: 算法设计与分析——递归与分治——归并排序
下一篇: 算法设计与分析——递归与分治策略——线性时间选择
943802606
博客等级 码龄6年 1万+粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值