归并排序 刷题笔记

归并排序的写法

归并排序

分治+双指针

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;

}

相关推荐
a587695 分钟前
Elasticsearch核心概念与Java实战:从入门到精通
java·es
Brookty1 小时前
【JavaEE】线程安全-内存可见性、指令全排序
java·开发语言·后端·java-ee·线程安全·内存可见性·指令重排序
tellmewhoisi1 小时前
前置配置1:nacos 基本配置(注册与发现)
java
会开花的二叉树1 小时前
继承与组合:C++面向对象的核心
java·开发语言·c++
长河3 小时前
Java开发者LLM实战——LangChain4j最新版教学知识库实战
java·开发语言
Cyan_RA93 小时前
SpringMVC @RequestMapping的使用演示和细节 详解
java·开发语言·后端·spring·mvc·ssm·springmvc
喵手5 小时前
玩转Java网络编程:基于Socket的服务器和客户端开发!
java·服务器·网络
再见晴天*_*6 小时前
SpringBoot 中单独一个类中运行main方法报错:找不到或无法加载主类
java·开发语言·intellij idea
Hello_Embed8 小时前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中8 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust