快排+归并

news2024/11/25 19:06:10

🥇快排

🎀快排题目

快排

🎫快排代码实现

#include<iostream>
using namespace std;
const int N=100010;//定义一个只读变量
int a[N]={0};//开辟空间,定义全局变量,后来就不用传参了
void quicksort1(int l,int r)
{
    if(l>=r) return;
    int x=a[(l+r+1)/2];
    int i=l-1,j=r+1;
    while(i<j)
    {
        do i++;while(a[i]<x);
        do j--;while(a[j]>x);
        if(i<j) swap(a[i],a[j]);
    }
    quicksort(l,i-1);
    quicksort(i,r);
}
void quicksort2(int l,int r)
{
    if(l>=r) return;
    int x=a[(l+r+1)/2];
    int i=l-1,j=r+1;
    while(i<j)
    {
        do i++;while(a[i]<x);
        do j--;while(a[j]>x);
        if(i<j) swap(a[i],a[j]);
    }
    quicksort(l,j);
    quicksort(j+1,r);
    
    
}

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    quicksort1(0,n-1);
    for(int i=0;i<n;i++) cout<<a[i]<<' ';
    
    return 0;
}

🎊快排动图展示

快排动图

🎆快排思想

快排:首先选取一个参照物,然后使用两个指针分别与他进行比较,需要左边的比他小,右边的比他大,如果不符和就交换;知道两个指针相等或者交错;接着进行递归,直到最后只剩下1个元素才停止

🏅🏅🏅代码讲解

(接下来的模版是需要记住的)
1.题目需要10^5的空间大小,我们为了方便多开辟10个空间
2.使用递归的时候先明确递归出口—l>=r
3.选取参照物—x=a[(l+r+1)/2]—为什么需要进行l+r+1呢,不能直接就r+l吗???
这是因为我们需要进行向上取整,如果是r+l会出现死递归的现象
4.我们定义两个变量i,j需要让i先指向第一个的前一个,j指向最后一个的后一个,然后开始的时候先让i++,j–然后再进行判断(记住就行了

	//这种方法是跑不过去的,会出现很多的问题
    int i=l,j=r;
    while(i<j)
    {
        while(a[i]<x) i++;
        while(a[j]>x) j--;
        if(i<j) swap(a[i],a[j]);
    }

5.c++的同学可以直接使用swap函数(自带的),如果需要自我实现的话,需要注意传参的时候是传值还是传地址
6.交换之前需要进行判断,如果i<j才是需要进行交换的,如i=j是可以进行交换的,但是没有必要
7.(需要背过

//这两个是模版

    quicksort(l,i-1);
    quicksort(i,r);


    quicksort(l,j);
    quicksort(j+1,r);

🥇归并

🎀归并题目

归并题目

🎫归并代码实现

#include<iostream>
using namespace std;
const int N=100010;
    int nums[N];
    int tem[N];
void mergesort(int l,int r)
{
    if(l>=r) return ;
    int mid=l+r>>1;
    
    mergesort(l,mid),mergesort(mid+1,r);
    int k=0;
    int i=l,j=mid+1;
    while(i<=mid&&j<=r)
    {
        if(nums[i]<nums[j]) tem[k++]=nums[i++];
        else tem[k++]=nums[j++];
    }
    while(i<=mid) tem[k++]=nums[i++];
    while(j<=r) tem[k++]=nums[j++];
    for(int i=l,j=0;i<=r;i++,j++) nums[i]=tem[j];
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++) cin>>nums[i];
    mergesort(0,n-1);
    for(int i=0;i<n;i++) cout<<nums[i]<<' ';
    
    
    return 0;
}

🎊归并动图

归并动图

🎆归并思想

归并是从最小的部分开始进行排序,逐层排序,是每一层越来越有序,直到最后整体有序

🏅🏅🏅代码讲解

(模版需要记住哦)
1.这里我们只需要mid=l+r>>1 ,因为***+的优先级大于>>的优先级***,如果不清楚的同学可以加上括号
2.因为归并排序是先最小逐层变大,所以需要先递归;同时我们可以使用逗号表达式
3.我们需要定义一个额外的空间用来存储已经排好序的数组,
4.循环条件需要注意,一定是&&不能是||,因为如果是||,我们想象一下,如果一个区间已经遍历完了,另一个区间还在继续,那么这个已经遍历完的区间是不是还在继续遍历,那是不是就不是我们想要的结果了
5.我们进行判断,如果nums[i]<nums[j] 将nums[i]存入tem[k],否则将nums[j]存入tem[k];因为i++和++i的问题,我们只能使用这种,或者分开写

    tem[k]=nums[i];
    k++;
    i++;

6.最后我们一定要将没有遍历完的将他们统一写入tem数组
7.最最后将tem数组中的元素统一传回nums数组原位置

⏱⏱⏱背过背过背过,重要的事情说三遍(会节省很多时间的)

希望我的讲解能帮助到大家!!!
感谢大家的支持!!!

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

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

相关文章

(三)多文件云传输框架项目实现(详解)

文章目录 前言《多文件云传输》框架概述简介技术实现框架基本思想 《多文件云传输》框架思考需求分析 《多文件云传输》框架实现数据基础实现技术难点实现 前言 《多文件云传输》框架的实现是本人的一个编程训练项目&#xff0c;为了提升本人的编程能力、JAVA 编程思想&#x…

第二章 数据类型、运算符与表达式

如何打开项目 如何打开已经存在的解决方案&#xff1f; 找到要打开的解决方案目录&#xff0c;进去之后双击后缀为.sln的文件即可打开该解决方案。 或者从最近打开项目中打开&#xff1a; Online Judge使用 OJ简介 在线判题系统&#xff08;Online Judge&#xff0c;缩写OJ…

GIN框架(GOLANG)讲解如何疯速入门

1.初始化项目&#xff1a; 1.初始化项目&#xff1a;go mod init 2.下载gin框架&#xff1a;go get -u github.com/gin-gonic/gin 3.引入&#xff1a;import "github.com/gin-gonic/gin" 注意点&#xff1a; 报错&#xff1a;$GOPATH/go.mod exists but should …

Python可视化分析项目

今天给大家分享一个基于python的django框架结合爬虫以及数据可视化和数据库的项目&#xff0c;该项目总体来说还是挺不错的&#xff0c;下面针对这个项目做具体介绍。 1&#xff1a;项目涉及技术&#xff1a; 项目后端语言&#xff1a;python 项目页面布局展现&#xff1a;前…

代码随想录算法训练营第四十二天|416. 分割等和子集

LeetCode416. 分割等和子集 背包问题&#xff0c;有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。背包问题有多种背包方式&#xff0c;常见…

地理探测器的应用方法

关于地理探测器的使用&#xff0c;网络上有大量的教学视频及资料&#xff0c;既可以用Excel计算&#xff0c;也可以利用R语言计算&#xff0c;本文主要分享利用Excel计算的方法&#xff0c;借鉴了大量的学习资料&#xff0c;记录一下供自己参考&#xff0c;也希望能帮到有需要的…

CLR via C#(一)CLR的执行模型

一、什么是CLR CLR全称Common Language Runtime&#xff0c;即公共语言运行时。它可以为所有面向CLR的语言提供运行时的内存管理、程序集加载、安全性、异常处理和线程同步等功能。 事实上&#xff0c;CLR并不关心开发者使用的到底是哪种语言&#xff0c;只要这门语言的编译器…

chatgpt赋能python:Python图像处理优化技巧:提高网站SEO效果的必修课程

Python图像处理优化技巧&#xff1a;提高网站SEO效果的必修课程 介绍 在当前数字化时代&#xff0c;网站的SEO优化已经成为了网站营销的重要一环。在优化网站SEO的同时&#xff0c;提升图像处理技巧也成为了重要的一环。Python作为当前最为火热的数据科学语言之一&#xff0c…

chatgpt赋能python:Python计算圆柱体积的方法

Python计算圆柱体积的方法 Python是一种广泛使用的编程语言&#xff0c;由于其易于学习和使用的特点&#xff0c;许多人在业余时间选择了学习Python。Python可以用来解决各种计算问题&#xff0c;其中包括计算圆柱体积。在本文中&#xff0c;我们将探讨如何使用Python计算圆柱…

chatgpt赋能python:Python在一个程序里调用另一段程序

Python在一个程序里调用另一段程序 随着Python程序的复杂度越来越高&#xff0c;有时候一个程序难以处理所有的任务。这时候我们可能需要将任务拆分成多个脚本来执行。但是&#xff0c;这会导致代码的复杂性增加&#xff0c;同时也会增加可读性和维护成本。这时候&#xff0c;…

LeetCode排序数组(常用排序一一实现)

912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 这道题他会设置一个数据量特别特别大的案例&#xff0c;对于一般的算法是一定过不去的 1.冒泡排序---这种的时间复杂度是O(n*n)&#xff0c;对于这道题是不可能过得去的 /*** Note: The returned array must be malloce…

EMQX将数据发送到后端

本文主要是记录了使用免费的EMQX的数据集成功能&#xff0c;将数据流转到后端平台。 在实现过程中&#xff0c;首先是在云服务器之中下载了EMQX&#xff0c;之后通过EMQX的数据集成功能&#xff0c;创建了数据桥接以及与之对应的规则&#xff0c;可以实现将EMQX接收到的数据转发…

C# | 二分查找算法的实现

C# | 二分查找算法的实现 文章目录 C# | 二分查找算法的实现前言示例代码算法思路测试结果结束语 前言 二分查找法一种在有序数组中查找目标值的算法。划重点——“有序”&#xff0c;与需要遍历整个数组的查询算法不同&#xff0c;二分查找法通过将数组分成两部分来快速定位目…

MATLAB-二维图形的绘制

本博文主要介绍绘图函数 Plot 函数的使用,图形的网格、坐标、标题、图例备注以及线型和颜色标记等。 一、Plot 指令 将数据绘制成曲线的函数是 Plot 指令, 该命令可以带有不同数目的参数。最简单的形式就是将数据传递给 Plot , 但是线条的类型和颜色和颜色…

Vue.js 比较重要知识点总结三

概述 Vue 中 nextTick 的实现原理v-if 和 v-show 的区别Vue 中的 key 有什么作用如何理解ref toRef和toRefsComposition API如何实现代码逻辑复用&#xff1f; Vue 中 nextTick 的实现原理 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xf…

chatgpt赋能python:Python在线聊天:实现即时通讯的快速解决方案

Python在线聊天&#xff1a;实现即时通讯的快速解决方案 在当今数字时代&#xff0c;在线聊天已经成为人与人之间交流的主流方式。Python在线聊天应用程序提供了一种快速且可定制的解决方案&#xff0c;使个人用户和企业可以进行互联网通信。本文将向您介绍Python在线聊天的基…

软考A计划-电子商务设计师-电子商务系统建设

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

深挖MYSQL大表加索引

深挖MYSQL大表加索引 起因是这样的&#xff0c;有一张表存在慢sql&#xff0c;查询耗时最多达到12s&#xff0c;定位问题后发现是由于全表扫描导致&#xff0c;需要对字段增加索引&#xff0c;但是表的数据量600多万有些大&#xff0c;网上很多都说对大表增加索引可能会导致锁…

垂直行业(新站)SEO流量快速起飞的核心思路

现在做站不比以前了&#xff0c;不管你是做百度也好&#xff0c;还是谷歌也罢&#xff0c;对于行业精准SEO流量来说肯定是没有以前那么容易做了。但是不容易做不代表没有机会做&#xff0c;机会一直还是有的&#xff0c;尤其是最近百度打击泛站&#xff0c;对于垂直行业来说其实…

chatgpt赋能python:Python图片尺寸大小修改指南

Python图片尺寸大小修改指南 在现代网站设计中&#xff0c;图像是非常重要的一部分。图片质量和大小是网站排名和用户体验的关键因素。一般来说&#xff0c;网站应该尽量避免使用过多的大图片&#xff0c;因为它们会使用户等待过长的时间&#xff0c;同时也会降低网站的加载速…