算法基础学习|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;
}
相关推荐
浮游本尊17 小时前
React 18.x 学习计划 - 第四天:React Hooks深入
前端·学习·react.js
程序员老舅17 小时前
C++参数传递:值、指针与引用的原理与实战
c++·c/c++·值传递·引用传递·指针传递·参数传递机制
hadage23318 小时前
--- 数据结构 AVL树 ---
数据结构·算法
liu****18 小时前
8.list的使用
数据结构·c++·算法·list
立志成为大牛的小牛18 小时前
数据结构——二十六、邻接表(王道408)
开发语言·数据结构·c++·学习·程序人生
阿拉丁的梦18 小时前
后期材质-屏幕冲击径向模糊
算法·材质
weixin_4296302618 小时前
实验二-决策树-葡萄酒
算法·决策树·机器学习
草莓熊Lotso19 小时前
C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
前端·c++·python·selenium
Olrookie19 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
茉莉玫瑰花茶19 小时前
floodfill 算法(dfs)
算法·深度优先