归并排序 刷题笔记

归并排序的写法

归并排序

分治+双指针

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;

}

相关推荐
少睡点觉10 分钟前
LeetCode 238. 除自身以外数组的乘积 问题分析+解析
java·算法·leetcode
9523621 分钟前
数据结构-二叉树
java·数据结构·学习
学IT的周星星22 分钟前
SpringMVC请求参数的绑定
java·开发语言
liliangcsdn37 分钟前
EnsembleRetriever中的倒数融合排序算法
算法·排序算法
冉佳驹40 分钟前
数据结构 ——— 八大排序算法的思想及其实现
c语言·数据结构·排序算法·归并排序·希尔排序·快速排序·计数排序
大筒木老辈子43 分钟前
Git笔记---远程仓库的创建与基本操作
笔记·git
一 乐1 小时前
宠物猫店管理|宠物店管理|基于Java+vue的宠物猫店管理管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·后端·宠物管理
r***99821 小时前
在2023idea中如何创建SpringBoot
java·spring boot·后端
熊猫比分管理员1 小时前
【全栈源码解决方案】Vue+Java四端齐全,一周交付可运行项目!
java·前端·vue.js
chen_note1 小时前
K8s的配置存储与实战
java·容器·kubernetes·volume·k8s存储