分治思想排序(快速排序、归并排序)

分治:分而治之,即把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并

优点:

  1. 降低时间复杂度:分治法可以将大问题分解为小问题,通过解决小问题来有效解决原问题,从而降低算法的时间复杂度
  2. 简单易懂:分治算法的思路通常比较直观,编写代码时难度较低
  3. 并行处理:由于分解得到的子问题之间是相互独立的,可以同时进行解决,提高了解决问题的效率
  4. 容易确定运行时间:分治算法的运行时间通常可以通过分析子问题的数量和每个子问题的复杂度来确定

缺点:

  1. 空间需求大:分治法需要额外的空间来存储子问题的解,可能会导致空间复杂度增加
  2. 递归开销:分治算法通常采用递归方式实现,这会增加函数调用的开销,尤其是在问题规模较大时,可能会导致系统资源的大量消耗,严重时甚至可能导致程序崩溃
  3. 分解和合并的复杂性:虽然子问题的解可以通过合并得到原问题的解,但如果分解和合并的过程过于复杂,可能会使得分解和合并所花费的时间超出暴力解法

1、快速排序

排序一次将数据分割成独立的两部分,其中一份中的所有数据都比另外一份的所有数据都要小,然后对这两部分再次进行该排序,整个排序过程可以使用递归进行来达到整个数据成为有序序列

步骤:

  1. 确定分界数据
  2. 划分、调整区间
  3. 递归划分后的区间
void quick_sort(int q[], int l, int r){
    //递归终止条件
    if (l >= r) return;
    
    int i = l - 1, j = r + 1, x = q[(l + r)/2];
    
    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);
}

2、归并排序

将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

步骤:

  1. 确定分界点
  2. 递归排序
  3. 归并,合二为一
void merge_sort(int q[], int l, int r){
    //递归终止条件
    if (l >= r) return;
    //找到分界点
    int mid = l + r >> 1;
    //递归进入更小区间
    merge_sort(q, l, mid), merge_sort(q, mid + 1, r);
    //划分为两个区间进行处理
    int k = 0, i = l, j = mid + 1;
    while (i <= mid && j <= r){
        if (q[i] <= q[j]){
            tmp[k ++ ] = q[i ++ ];
        }else{
            tmp[k ++ ] = q[j ++ ];
        } 
    }
    while (i <= mid){
        tmp[k ++ ] = q[i ++ ];
    }
    while (j <= r) {
        tmp[k ++ ] = q[j ++ ];
    }
    for (i = l, j = 0; i <= r; i ++, j ++ ){
        q[i] = tmp[j];
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vscode教程

个人笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔&#xff1a;工作总结随笔_8、以前工作中都接触过哪些类型的测试文档-CSDN博客 目录 一&#xff1a…

回合制游戏战斗模块的制作

回合制游戏战斗模块的制作 回合制游戏相信大家没玩过也见过&#xff0c;了解它的玩法。回合制&#xff0c;那就是你来我回的&#xff0c;你一回合我一回合&#xff0c;直到把对方打败。市面上的回合制游戏比较经典的有梦幻西游&#xff0c;问道&#xff0c;神武&#xff0c;完…

基于Springboot的航班进出港管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的航班进出港管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结…

ThinkPHP审计(2) Thinkphp反序列化链5.1.X原理分析从0编写POC

ThinkPHP审计(2) Thinkphp反序列化链子5.1.X原理分析&从0编写POC 文章目录 ThinkPHP审计(2) Thinkphp反序列化链子5.1.X原理分析&从0编写POC动态调试环境配置Thinkphp反序列化链5.1.X原理分析一.实现任意文件删除二.实现任意命令执行真正的难点 Thinkphp反序列化链5.1.…

探索 2024 年徽标制作的最佳定制 GPT

智能徽标设计革命&#xff1a;探索最佳定制GPT工具 介绍 在快速发展的数字设计世界中&#xff0c;随着定制生成预训练 Transformer (GPT) 的出现&#xff0c;徽标的创建取得了重大飞跃。 这些先进的人工智能工具彻底改变了设计师设计徽标的方式&#xff0c;提供了前所未有的创造…

HCIA-Datacom H12-811 题库补充(4/7)

完整题库及答案解析&#xff0c;请直接扫描上方二维码&#xff0c;持续更新中 共享介质型网络使用哪一种技术进行数据转发&#xff1f; A&#xff1a;CDMA/CD B&#xff1a;CSMA/AC C&#xff1a;TDMA/CD D&#xff1a;CSMA/CD 答案&#xff1a;D 解析&#xff1a;以太网 CSMA …

详解多态、虚继承、多重继承内存布局及虚表(C++)

本篇文章深入分析多态、虚继承、多重继承的内存布局及虚函数表以及实现原理。编译器使用VS 2022&#xff0c;直接放结论&#xff0c;代码及内存调试信息在后文。 结论 内存布局 一个没有虚函数的类&#xff0c;它的大小其实就是所有成员变量的大小&#xff0c;此时它就是一个…

手机如何在线制作gif?轻松一键在线操作

现在大家都喜欢使用手机来拍摄记录有趣的事物&#xff0c;但是时间长了手机里的视频越来越多导致手机存储空间不够了&#xff0c;这些视频又不想删除时应该怎么办呢&#xff1f;这个很简单&#xff0c;下面就给大家分享一款不用下载手机就能操作的视频转gif网站-GIF中文网&…

【海思SS528 | VDEC】查看VDEC的proc调试信息 | cat /proc/umap/vdec

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

稀碎从零算法笔记Day38-LeetCode:除自身以外数组的乘积

题型&#xff1a;数组、前缀、分治、 链接&#xff1a;238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之…

Linux:安装zabbix-agent被监控端(2)

本章是结合着上一篇文章的续作 Linux&#xff1a;部署搭建zabbix6&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/137426966?spm1001.2014.3001.5501本章将在两台centos部署agent端&#xff0c;然后使用server进行连接监控 agent1 在1…

突破编程_前端_SVG(基础元素介绍)

1 rect 矩形 在 SVG 中&#xff0c;<rect> 元素用于创建圆形。 &#xff08;1&#xff09;基本语法 <rectx"x坐标"y"y坐标"width"宽度"height"高度"rx"可选&#xff1a;圆角x半径"ry"可选&#xff1a;圆角…

达梦数据库记录

1.计算日期差 SELECT DATEDIFF(day,sysdate(), 2024-06-01) 2.出现HJ_BUF_GLOBAL_SIZE设置不当造成应用报错的问题&#xff0c;详细信息如下&#xff1a; dm.jdbc.driver.DMException: 超出全局hash join空间,适当增加HJ_BUF_GLOBAL_SIZEat dm.jdbc.driver.DBError.throwExce…

Java设计模式:桥接模式实现灵活组合,超越单一继承的设计之道(十)

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 一、引言二、什么是桥接设计模式三、桥接设计模式的核心思想四、桥接设计模式的角色五、桥接设计模式的工作流程和实现实现方…

如何设置win10系统不更新,win10怎么设置系统不更新系统

Win10频繁地更新让很多用户感到困扰,虽然我们都知道,更新系统有利于提高系统的安全性,同时还能获得功能更新以及一些bug修复,但是过于频繁的更新会让人感到疲惫,也有不少用户对此举表示反感。一般情况下,win10系统是默认自动更新的,如何阻止系统自动更新呢?下面,小编跟…

文件夹类型变无?数据恢复有高招!

在日常使用电脑的过程中&#xff0c;我们有时会遇到一种奇怪的现象&#xff1a;原本整齐有序的文件夹突然变成了无类型的状态&#xff0c;即文件夹类型变无。这些文件夹失去了原有的图标和属性&#xff0c;变成了系统无法识别的空白图标&#xff0c;甚至无法打开。这种情况下&a…

甘特图/横道图制作技巧 - 任务组

在甘特图中通过合理的任务分组可以让项目更加清晰&#xff0c;修改也更方便。 列如下面的甘特图一眼不太容易看清楚整体的进度。或者需要把所有的任务整体的延迟或者提前只能这样一个一个的任务调整&#xff0c;就比较麻烦。 通过给任务分组&#xff0c;看这上面整体的进度就…

Redis安装及基本类型详解

目录 一、Redis概念 二、Redis的应用场景 三、Redis的特点 四、redis访问数据为什么快&#xff1f; 五、Ubuntu下安装redis 五、全局命令(针对任意类型value都可使用) 1、keys &#xff08;1&#xff09;keys * &#xff08;2&#xff09;keys pattern 2、exists 3、…

git Failed to connect to 你的网址 port 8282: Timed out

git Failed to connect to 你的网址 port 8282: Timed out 出现这个问题的原因是&#xff1a;原来的仓库换了网址&#xff0c;原版网址不可用了。 解决方法如下&#xff1a; 方法一&#xff1a;查看git用户配置是否有如下配置 http.proxyhttp://xxx https.proxyhttp://xxx如果…

《梦幻西游》迎来史上最大翻车,老玩家们为何纷纷揭竿而起?

因一次调整&#xff0c;21岁的《梦幻西游》迎来了自己有史以来最大的一波节奏。 玩家在微博上炮轰官方&#xff0c;称&#xff1a;“游戏借着打击工作室牟利的称号&#xff0c;砍副本活动产出&#xff0c;然后自己口袋无限卖”&#xff0c;要求改善游戏现状。 从3月29日起&am…