当前位置: 首页 > news >正文

算法基础学习|02归并排序——分治

一、思路

(1)确定分界点:mid=(l+r)/2    ——这里和快排不同

(2)递归排序(left  right)

(3)归并——合二为一

时间复杂度nlogn

二、题目练习  

三、模板

归并排序

#include<bits/stdc++.h>
using namespace std;const int N=1e5+10;int q[N],tmp[N];
int n;void merge_sort(int q[],int l,int r)
{if(l>=r)return;int mid=l+r>>1;merge_sort(q,l,mid),merge_sort(q,mid+1,r);int k=0,i=l,j=mid+1;while(i<=mid&&j<=r)if(q[i]<=q[j])tmp[k++]=q[i++];else tmp[k++]=q[j++];while(i<=mid)tmp[k++]=q[i++];while(j<=r)tmp[k++]=q[j++];for(i=l,j=0;i<=r;i++,j++)q[i]=tmp[j];}int main()
{scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&q[i]);merge_sort(q,0,n-1);for(int i=0;i<n;i++)printf("%d ",q[i]);return 0;
}

逆序对的数量

#include<iostream>
using namespace std;const int N = 1e5+10;
int q[N],tmp[N];
int n;
long long result=0;void merge_sort(int q[],int l, int r)
{if(l>=r)return;int mid=l+r>>1;merge_sort(q,l,mid),merge_sort(q,mid+1,r);int k=0,i=l,j=mid+1;while(i<=mid&&j<=r)if(q[i]<=q[j])tmp[k++]=q[i++];else{tmp[k++]=q[j++];result+=mid-i+1;}while(i<=mid)tmp[k++]=q[i++];while(j<=r)tmp[k++]=q[j++];for(int i=l,j=0;i<=r;i++,j++)q[i]=tmp[j];}int main()
{scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&q[i]);merge_sort(q,0,n-1);printf("%lld",result);return 0;
}

相关文章:

  • go单向链表
  • 阿里千问Qwen3技术解析与部署指南 :混合推理架构突破性优势与对DeepSeek R1的全面超越
  • 软件测试基础知识详解
  • 【VLNs篇】01:视觉语言导航(VLN)中的LLM角色
  • 关于flex布局
  • scratch代码——游戏开发 【弹簧与反弹】
  • ArrayList的elementData.length和size
  • 双向流热固耦合的收敛
  • (leetcode) 力扣100 4.移动零(两种O(n)方法 双指针)
  • 大模型核心技术及架构解析
  • 2025.4.29_STM32_看门狗WDG
  • 一文读懂 JavaScript 中的深浅拷贝
  • C#学习——类型、变量
  • 学习在暑假避免躺平和内卷(马井堂)
  • 16、路由守卫:设置魔法结界——React 19 React Router
  • 系统安装 ios放同一个u盘 ventory使用+windows安装,双系统互相访问中间盘
  • PPT/WORD如何实现Shift键加鼠标滚轮实现左右滑动
  • 嵌入式复习第一章
  • 拆固态硬盘短接开卡+ as ssd benchmark查看硬盘读写速度
  • 0.5 像素边框实现
  • 万科:一季度营收近380亿元,销售回款率超100%
  • 澎湃回声|山东莱州、潍坊对“三无”拖拉机产销市场展开调查排查
  • 澎湃思想周报丨数字时代的育儿;凛冬已至好莱坞
  • 新任海南琼海市委副书记陈明已主持市政府党组全面工作
  • 在黄岩朵云书院,邂逅陈丹燕与月季花的故事
  • 专访|白俄罗斯共产党中央第一书记瑟兰科夫:只有大家联合起来,才能有效应对当前危机所带来的冲击