C++ 分治

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

1.分治法

2.二分搜索

函数传参——数组 

3.棋盘覆盖

4.合并排序

5.快速排序


提示:以下是本篇文章正文内容,下面案例可供参考

1.分治法

基本思想:1.将规模为n的问题分解为k个规模较小的子问题,这些问题相互独立且与原问题相同;2.递归地解这些子问题;3.将各子问题的解合并得到原问题的解。

2.二分搜索

问题描述:从单调不减的一组元素中找到特定的元素x

#include <iostream>
using namespace std;const int n=10;
int a[n]={0,1,2,4,5,8,9,10,20,40};
int BinarySearch(int x)
{int left=0;int right=n-1;while(left<=right){int middle=(left+right)/2;if(x==a[middle])	return middle;if(x>a[middle])		left=middle+1;//右半边查找else	right=middle-1;//左半边查找}return -1;
}
int main()
{int x;cin>>x;cout<<BinarySearch(x);
}

函数传参——数组 

#include <iostream>
using namespace std;

const int n=10;

int BinarySearch(int a[],int x)
{……}
int main()
{
    int a[n]={0,1,2,4,5,8,9,10,20,40};
    int x;
    cin>>x;
    cout<<BinarySearch(a,x);
}

3.棋盘覆盖

方格规模为size*size,size=2的k次方(k为整数)

代码如下(示例):

#include<iostream>
#include<iomanip> 
using namespace std;int tile=0;
int Board[1024][1024]={};void ChessBoard(int tr ,int tc,int dr,int dc,int size)
{//tr棋盘左上角行号,tc期盼左上角列号,dr被覆盖的行号,dc被覆盖的列号 if(size==1) return;//2*2时往下走,特殊方格之外的三个都将被覆盖,至此覆盖完成int t=++tile;int s=size/2;	//分割棋盘//左上if(dr<tr+s&&dc<tc+s)	ChessBoard(tr,tc,dr,dc,s);//特殊方格在 ,继续划分else{	//不在 Board[tr+s-1][tc+s-1]=t;//覆盖右下角,创造出特殊方格 ChessBoard(tr,tc,tr+s-1,tc+s-1,s);//这部分棋盘右下角有特殊方格,继续划分} //右上if(dr<tr+s&&dc>=tc+s)	ChessBoard(tr,tc+s,dr,dc,s);//特殊方格在 else{	//不在 Board[tr+s-1][tc+s]=t;//覆盖左下角 ChessBoard(tr,tc+s,tr+s-1,tc+s,s);}//左下 if(dr>=tr+s&&dc<tc+s)	ChessBoard(tr+s,tc,dr,dc,s);//特殊方格在 else{	//不在 Board[tr+s][tc+s-1]=t;//覆盖右上角 ChessBoard(tr+s,tc,tr+s,tc+s-1,s);}  //右下if(dr>=tr+s&&dc>=tc+s)	ChessBoard(tr+s,tc+s,dr,dc,s);//特殊方格在 else{	//不在 Board[tr+s][tc+s]=t;//覆盖左上角 ChessBoard(tr+s,tc+s,tr+s,tc+s,s);}  
}
int main()
{int size=0;cin>>size;int tr=0,tc=0;int dr=0,dc=0;cin>>dr>>dc;//特殊方格坐标 ChessBoard(tr,tc,dr,dc,size);for(int i=0;i<size;i++){for(int j=0;j<size;j++){cout<<setw(2)<<Board[i][j]<<' ';//setw(n)预设宽度 }cout<<endl;}} 

运行结果:

 

4.合并排序

void merge(vector<int>& nums,vector<int>& arr,int l,int mid,int r){if(l==r) return;int a=l,b=mid+1,index=l;while(a<=mid&&b<=r){if(nums[a]<=nums[b]) arr[index]=nums[a],a++;else arr[index]=nums[b],b++;index++;}while(a<=mid)   arr[index]=nums[a],a++,index++;while(b<=r) arr[index]=nums[b],b++,index++;for(int i=l;i<=r;i++) nums[i]=arr[i];}void Mergesort(vector<int>& nums,vector<int>& arr,int l,int r){if(l==r) return;int mid=(l+r)/2;Mergesort(nums,arr,l,mid);//左半部分Mergesort(nums,arr,mid+1,r);//右半部分merge(nums,arr,l,mid,r);//合并排序}vector<int> sortArray(vector<int>& nums) {vector<int> arr(nums);int n=nums.size();Mergesort(nums,arr,0,n-1);return nums;}

5.快速排序

void Swap(int* a,int* b){int temp=*b;*b=*a;*a=temp;}int Partition(vector<int>& nums,int p,int r){int i=p,j=r+1;int x=nums[p];while(1){while(nums[++i]<x && i<r);while(nums[--j]>x);if(i>=j) break;Swap(&nums[i],&nums[j]);}Swap(&nums[p],&nums[j]);return j;}void Quicksort(vector<int>& nums,int p,int r){if(p<r){int q=Partition(nums,p,r);Quicksort(nums,p,q-1);//左半部分Quicksort(nums,q+1,r);//右半部分}}vector<int> sortArray(vector<int>& nums) {int n=nums.size();Quicksort(nums,0,n-1);return nums;}

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

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

相关文章

Spark常问面试题---项目总结

一、数据清洗&#xff0c;你都清洗什么&#xff1f;或者说 ETL 你是怎么做的&#xff1f; 我在这个项目主要清洗的式日志数据&#xff0c;日志数据传过来的json格式 去除掉无用的字段&#xff0c;过滤掉json格式不正确的脏数据 过滤清洗掉日志中缺少关键字段的数据&#xff…

基于智能语音交互的智能呼叫中心工作机制

在智能化和信息化不断进步的现代&#xff0c;智能呼叫中心为客户提供高质量、高效率的服务体验&#xff0c;提升众多品牌用户的满意度和忠诚度。作为实现智能呼叫中心的关键技术之一的智能语音交互技术&#xff0c;它通过集成自然语言处理&#xff08;NLP&#xff09;、语音识别…

Android Studio 右侧工具栏 Gradle 不显示 Task 列表

问题&#xff1a; android studio 4.2.1版本更新以后AS右侧工具栏Gradle Task列表不显示&#xff0c;这里需要手动去设置 解决办法&#xff1a; android studio 2024.2.1 Patch 2版本以前的版本设置&#xff1a;依次打开 File -> Settings -> Experimental 选项&#x…

SpringBoot集成Kafka和avro和Schema注册表

Schema注册表 为了提升kafka的性能&#xff0c;减少网络传输和存储的数据大小&#xff0c;可以把数据的schema部分单独存储到外部的schema注册表中&#xff0c;整体架构如下图所示&#xff1a; 1&#xff09;把所有数据需要用到的 schema 保存在注册表里&#xff0c;然后在记…

http(请求方法,状态码,Cookie与)

目录 1.http中常见的Header(KV结构) 2.http请求方法 2.1 请求方法 2.2 telnet 2.3 网页根目录 2.3.1 概念 2.3.2 构建一个首页 2.4 GET与POST方法 2.4.1 提交参数 2.4.2 GET与POST提交参数对比 2.4.3 GET和POST对比 3.状态码 3.1 状态码分类 3.2 3XXX状态码 3.2 …

十,[极客大挑战 2019]Secret File1

点击进入靶场 查看源代码 有个显眼的紫色文件夹&#xff0c;点击 点击secret看看 既然这样&#xff0c;那就回去查看源代码吧 好像没什么用 抓个包 得到一个文件名 404 如果包含"../"、"tp"、"input"或"data"&#xff0c;则输出"…

pytest自定义命令行参数

实际使用场景&#xff1a;pytest运行用例的时候&#xff0c;启动mitmdump进程试试抓包&#xff0c;pytest命令行启动的时候&#xff0c;传入mitmdump需要的参数&#xff08;1&#xff09;抓包生成的文件地址 &#xff08;2&#xff09;mitm的proxy设置 # 在pytest的固定文件中…

Unity AssetBundles(AB包)

目录 前言 AB包是什么 AB包有什么作用 1.相对Resources下的资源AB包更好管理资源 2.减小包体大小 3.热更新 官方提供的打包工具:Asset Bundle Browser AB包资源加载 AB包资源管理模块代码 前言 在现代游戏开发中&#xff0c;资源管理是一项至关重要的任务。随着游戏内容…

(一)Linux下安装NVIDIA驱动(操作记录)

目录 一、查看CUDA版本 1.输入nvidia-smi&#xff0c;查看驱动支持的最大CUDA版本&#xff0c;这里是11.6 2.输入nvcc --version&#xff0c;查看当前安装的CUDA版本&#xff0c;这里是11.3 二、卸载旧的NVIDIA驱动 1.卸载原有驱动 2.禁用nouveau&#xff08;必须&#x…

用Python做数据分析环境搭建及工具使用(Jupyter)

目录 一、Anaconda下载、安装 二、Jupyter 打开 三、Jupyter 常用快捷键 3.1 创建控制台 3.2 命令行模式下的快捷键 3.3 运行模式下快捷键 3.4 代码模式和笔记模式 3.5 编写Python代码 一、Anaconda下载、安装 【最新最全】Anaconda安装python环境_anaconda配置python…

Ai编程cursor + sealos + devBox实现登录以及用户管理增删改查(十三)

一、什么是 Sealos&#xff1f; Sealos 是一款以 Kubernetes 为内核的云操作系统发行版。它以云原生的方式&#xff0c;抛弃了传统的云计算架构&#xff0c;转向以 Kubernetes 为云内核的新架构&#xff0c;使企业能够像使用个人电脑一样简单地使用云。 二、适用场景 业务运…

重学设计模式-工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

在平常的学习和工作中&#xff0c;我们创建对象一般会直接用new&#xff0c;但是很多时候直接new会存在一些问题&#xff0c;而且直接new会让我们的代码变得非常繁杂&#xff0c;这时候就会巧妙的用到设计模式&#xff0c;平常我们通过力扣学习的算法可能并不会在我们工作中用到…

数据结构4——栈和队列

目录 1.栈 1.1.栈的概念及结构 1.2栈的实现 2.队列 2.1队列的概念及结构 2.2队列的实现 1.栈 1.1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶&#xff0c;另一端称为…

家政小程序开发,打造便捷家政生活小程序

目前&#xff0c;随着社会人就老龄化和生活压力的加重&#xff0c;家政服务市场的需求正在不断上升&#xff0c;家政市场的规模也正在逐渐扩大&#xff0c;发展前景可观。 在市场快速发展的影响下&#xff0c;越来越多的企业开始进入到市场中&#xff0c;同时家政市场布局也发…

Spring Cloud Alibaba(六)

目录&#xff1a; 分布式链路追踪-SkyWalking为什么需要链路追踪什么是SkyWalkingSkyWalking核心概念什么是探针Java AgentJava探针日志监控实现之环境搭建Java探针日志监控实现之探针实现编写探针类TestAgent搭建 ElasticsearchSkyWalking服务环境搭建搭建微服务微服务接入Sky…

HTTP 探秘之旅:从入门到未来

文章目录 导言&#xff1a;目录&#xff1a;第一篇&#xff1a;HTTP&#xff0c;互联网的“快递员”第二篇&#xff1a;从点开网页到看到内容&#xff0c;HTTP 究竟做了什么&#xff1f;第三篇&#xff1a;HTTP 的烦恼与进化史第四篇&#xff1a;HTTP 的铠甲——HTTPS 的故事第…

万字长文解读深度学习——多模态模型BLIP2

&#x1f33a;历史文章列表&#x1f33a; 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络&#xff08;前馈神经网络与反馈神经网络&#xff09;、常见算法概要汇总 万字长…

qt QToolBox详解

1、概述 QToolBox是Qt框架中的一个控件&#xff0c;它提供了一个带标签页的容器&#xff0c;用户可以通过点击标签页标题来切换不同的页面。QToolBox类似于一个带有多页选项卡的控件&#xff0c;但每个“选项卡”都是一个完整的页面&#xff0c;而不仅仅是标签。这使得QToolBo…

如何把阿里云ECS里的文件下载到本地(免登录免配置)

如何把阿里云ECS里的文件下载到本地&#xff08;免登录免配置&#xff09; 作为一个阿里云ECS的用户&#xff0c;Up时长会遇到希望把ECS里的文件下载到自己的个人电脑&#xff0c;然后在自己的电脑里面查看&#xff0c;保存或者发送给别人。最近发现阿里云新上了一个功能&…

Centos7安装MySQL8.0详细教程(压缩包安装方式)

本章教程&#xff0c;主要介绍如何在Centos7上安装MySQL8.0版本数据库&#xff08;压缩包安装方式&#xff09; 一、卸载系统自带的 Mariadb 1、查询 rpm -qa|grep mariadb2.、卸载 如果有查询结果&#xff0c;就进行卸载&#xff0c;没有就跳过该步骤。 rpm -e --nodeps mar…