归并排序 刷题笔记

归并排序的写法

归并排序

分治+双指针

1.定义一个mid

if(l>=r)return ;

2.分治

sort(q,l,mid);

sort(q,mid+1,r);

双指针

int i=l,j=mid,k=0;

将双序列扫入 缓存数组

条件 while(i<=mid&&j<=r)

两个数列比较大小 小的一方 进入缓存数组

扫尾

while(i<=mid) temp[k++]=q[i++];

while(j<=r) temp[k++]=q[j++];

复制 回去修改q[]数组的值

for (int i=l,j=0;i<=mid;i++,j++){

q[i]= temp[j];

}

代码

include<iostream>

#include<cstdio>

#include<cstring>

#include<algorithm>

#include<sstream>

const int N=1e5+10;

int q[N],temp[N];

int n;

void quick_sort(int q[],int l,int r){

if(l>=r){

return ;

}

int mid =(l+r)>>1;

quick_sort(q,l,mid);

quick_sort(q,mid+1,r);

int i=l,j=mid+1,k=0;

while(i<=mid&&j<=r){

if(q[i]<=q[j]){

temp[k++]=q[i++];

}else{

temp[k++]=q[j++];

}

}

while(i<=mid){

temp[k++]=q[i++];

}

while(j<=r){

temp[k++]=q[j++];

}

for(int i=l,j=0;i<=r;i++,j++){

q[i]=temp[j];

}

}

using namespace std;

int main(){

int n;

cin>>n;

for(int i=0;i<n;i++){

scanf("%d",&q[i]);

}

quick_sort(q,0,n-1);

for(int i=0;i<n;i++){

printf("%d ",q[i]);

}

return 0;

}

相关推荐
旭编2 分钟前
牛客周赛 Round 117
java·开发语言
受之以蒙13 分钟前
赋能 AI 与具身智能:Rust ndarray 构建安全高效的数据底座
人工智能·笔记·rust
无敌最俊朗@16 分钟前
01-总结
java·jvm·数据库
华仔啊35 分钟前
MyBatis-Plus 让你开发效率翻倍!新手也能5分钟上手!
java·后端·mybatis
武子康1 小时前
Java-167 Neo4j CQL 实战:CREATE/MATCH 与关系建模速通 案例实测
java·开发语言·数据库·python·sql·nosql·neo4j
乌暮1 小时前
JavaEE入门--计算机是怎么工作的
java·后端·java-ee
Z3r4y1 小时前
【代码审计】RuoYi-4.2 五处安全问题分析
java·web安全·代码审计·若依4.2·ruoyi-4.2
代码栈上的思考1 小时前
Spring MVC 中 @RequestMapping 路径映射与请求处理全流程
java·spring·mvc
WZTTMoon1 小时前
Spring MVC 核心工作原理:DispatcherServlet 全流程深度解析
java·spring·mvc
金銀銅鐵2 小时前
[Java] 用 Swing 生成一个最大公约数计算器(展示计算过程)
java·后端·数学