归并排序 刷题笔记

归并排序的写法

归并排序

分治+双指针

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;

}

相关推荐
信码由缰13 分钟前
Java数据库应用原型
java
凌然先生17 分钟前
12.如何利用ArcGIS进行基本的空间数据格式转换
经验分享·笔记·arcgis·电脑
fantasy5_525 分钟前
手写一个C++字符串类:从底层理解String的实现
java·jvm·c++
起这个名字44 分钟前
Langchain4j Rag 知识库教程
java·后端
Autism1141 小时前
javase-day22-stream
java·开发语言·windows·笔记
koo3641 小时前
李宏毅机器学习笔记34
人工智能·笔记·机器学习
fouryears_234171 小时前
IDEA推送github,身份认证错误:Cannot assign requested address: getsockopt 解决方法
java·ide·intellij-idea
我命由我123451 小时前
Android PDF 操作 - AndroidPdfViewer 显示 PDF 异常清单(数据为 null、数据为空、PDF 文件损坏、非 PDF 文件)
android·java·java-ee·pdf·android studio·android-studio·android runtime
CodeCraft Studio1 小时前
【金融行业案例】基于Vaadin全栈Java框架重构内部系统,全面提升开发效率与用户体验
java·金融·重构·vaadin·银行内部系统·纯java开发框架·java web框架
lumi.1 小时前
前端本地存储技术笔记:localStorage 与 sessionStorage 详解
前端·javascript·笔记