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.mzph.cn/bicheng/62922.shtml

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

相关文章

anaconda环境下安装第三方库

在 Anaconda 环境中使用 pip install 安装某些包时&#xff0c;可能会出现依赖或环境相关的问题。针对 fastdtw 的安装问题&#xff0c;你可以尝试以下解决方案&#xff1a; 1. 使用 Conda 安装 fastdtw Anaconda 的 conda 包管理器可以更好地处理依赖问题&#xff0c;尤其是…

用函数实现模块化程序设计(七)--数组作为函数参数(排序算法)

调用有参函数时&#xff0c;需要实参&#xff0c;实参可以是常量&#xff0c;变量&#xff0c;表达式&#xff0c;数组元素的作用与变量相当&#xff0c;凡是变量出现的地方都可用数组代替&#xff0c;数组元素可以用作函数实参&#xff0c;数组名可以作实参和形参&#xff0c;…

嵌入式Linux无窗口系统下搭建 Qt 开发环境

嵌入式Linux无窗口系统下搭建 Qt 开发环境 本文将介绍如何在树莓派的嵌入式 Linux 环境下&#xff0c;搭建 Qt 开发环境&#xff0c;实现无窗口系统模式&#xff08;framebuffer&#xff09;下的图形程序开发。 1. 安装 Qt 环境 接下来&#xff0c;安装核心 Qt 开发库以及与 …

基于STM32设计的智能宠物喂养系统(华为云IOT)_273

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】设计意义【5】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 参考文献1.6 系统框架图1.7 系统原理图1.8 实物图1.9…

C++【PCL】利用矩阵对点云进行刚体变换

/** 功能&#xff1a; 点云刚体变换* 头文件&#xff1a; #include <pcl/common/transforms.h>* 功能函数&#xff1a; pcl::transformPointCloud(*pPointCloudIn, *pPointCloudOut, transform_1);*/#include <pcl/io/ply_io.h>#include <iostream>// pcl #i…

Java项目实战II基于微信小程序的文章管理系统的设计与实现 (开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在信息爆炸的时代&#xff0c;内容创作与管理已成为众…

Conda 管理python开发环境

同步发布于我的网站 &#x1f680; 故事起因: 在公司使用Requests多任务并行开发时遇到了问题&#xff0c;使用 ProcessPoolExecutor 时不能正常发出网络请求&#xff0c;会卡在网络请求发不出去&#xff0c;但是善于用 ThreadPoolExecutor 时是可以的,纠结了很久&#xff0c;一…

【学习Go编程】

了解Go语言的基本概念&#xff1a; 学习Go的基本语法、数据类型、控制结构等。可以参考官方文档或基础教程来入门。 安装Go环境&#xff1a; 访问Go语言的官方网站&#xff0c;下载并安装适合你操作系统的Go编程环境。配置好环境变量&#xff0c;确保可以在命令行中使用go命令…

LLaMA-Factory 上手即用教程

LLaMA-Factory 是一个高效的大型语言模型微调工具&#xff0c;支持多种模型和训练方法&#xff0c;包括预训练、监督微调、强化学习等&#xff0c;同时提供量化技术和实验监控&#xff0c;旨在提高训练速度和模型性能。 官方开源地址&#xff1a;https://github.com/hiyouga/L…

PGSQL:联合唯一索引的创建和删除

创建联合唯一索引 假设有一个表 your_table&#xff0c;它有多个列&#xff0c;你想在其中的几列上创建一个联合唯一索引。以下是创建联合唯一索引的 SQL 语句&#xff1a; CREATE UNIQUE INDEX idx_unique_columns ON your_table(column1, column2, ...);注意&#xff1a; …

抓包之查看websocket内容

写在前面 本文看下websocket抓包相关内容。 1&#xff1a;正文 websocket基础环境搭建参考这篇文章。 启动后&#xff0c;先看chrome的network抓包&#xff0c;这里我们直接使用is:running来过滤出websocket的请求&#xff1a; 可以清晰的看到发送的内容以及响应的内容。在…

项目介绍和游戏搭建(拼图小游戏)

1. &#xff08;1&#xff09; import javax.swing.*;public class GameJFrame extends JFrame {//游戏主界面&#xff0c;游戏的所有逻辑public GameJFrame(){this.setSize(603,680);this.setVisible(true);//true是展示&#xff0c;flase是隐藏} } &#xff08;2&#xff…

Flask项目入门—会话技术Cookie和Session

Session和Cookie都是用于跟踪用户会话的技术、它们可以存储用户信息&#xff0c;以便在用户与网站进行交互时提供个性化的体验。然而&#xff0c;这两者在存储位置、使用方式、安全性等方面存在显著的差异。 工作原理/流程 Cookie 1、用户第一次访问时候服务器生成 Cookie&a…

【Maven】Nexus私服

6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库&#xff0c;它是架设在局域网内的仓库服务&#xff0c;用来代理位于外部的远程仓库&#xff08;中央仓库、其他远程公共仓库&#xff09;。一些无法从外部仓库下载到的构件&#xff0c;如项目组其他人员开发的…

前端Web性能分析工具扫盲

对于前端大型项目来说,很容易产生性能问题。对于这些性能问题,最常见的解决方式是使用性能分析工具进行分析,然后再进行针对性的解决。 一、Chrome DevTools 一般来说,前端的性能分析通常可以从时间和空间两个角度来进行: 时间:常见耗时,如页面加载耗时、渲染耗时、网…

一键生成后端服务,MemFire Cloud重新定义开发效率

作为开发者&#xff0c;特别是独立开发者和小团队成员&#xff0c;大家都知道开发的最大难题之一就是搭建后端服务。要让一个应用从零开始&#xff0c;除了前端的开发工作外&#xff0c;还需要考虑数据库、接口、认证、存储等等一系列繁琐的后台工作。而MemFire Cloud这款神器&…

HarmonyOS(60)性能优化之状态管理最佳实践

状态管理最佳实践 1、避免在循环中访问状态变量1.1 反例1.2 正例 2、避免不必要的状态变量的使用3、建议使用临时变量替换状态变量3.1 反例3.2 正例 4、参考资料 1、避免在循环中访问状态变量 在应用开发中&#xff0c;应避免在循环逻辑中频繁读取状态变量&#xff0c;而是应该…

Ubuntu 20.04中的权限管理:何时使用sudo以及何时可以避免

Ubuntu 20.04中的权限管理&#xff1a;何时使用sudo以及何时可以避免 在Ubuntu 20.04 LTS中&#xff0c;sudo命令的使用是区分普通用户权限和超级用户权限的关键。正确地理解何时需要使用sudo和何时可以直接使用命令是维护系统安全和操作有效性的重要部分。这里将详细解释何时…

mysql 查询所有的触发器

SELECTTRIGGER_SCHEMA AS Database,TRIGGER_NAME AS Trigger,EVENT_OBJECT_TABLE AS Table,EVENT_MANIPULATION AS Event,ACTION_STATEMENT AS Statement FROMinformation_schema.TRIGGERS;创建触发器遇到报错&#xff1a; You do not have the SUPER privilege and binary lo…

大模型专栏--Spring Ai Alibaba介绍和功能演示

Spring AI Alibaba 介绍和功能演示 背景 Spring AI Alibaba 开源项目基于 Spring AI 构建&#xff0c;是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践&#xff0c;提供高层次的 AI API 抽象与云原生基础设施集成方案&#xff0c;帮助开发者快速构建 AI 应用。…