归并排序 刷题笔记

归并排序的写法

归并排序

分治+双指针

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;

}

相关推荐
一颗花生米。20 分钟前
深入理解JavaScript 的原型继承
java·开发语言·javascript·原型模式
问道飞鱼21 分钟前
Java基础-单例模式的实现
java·开发语言·单例模式
ok!ko4 小时前
设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·原型模式
2402_857589364 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰5 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
哎呦没6 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
编程、小哥哥6 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring
IT学长编程7 小时前
计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·玩具租赁系统
莹雨潇潇7 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
杨哥带你写代码7 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端