首页 > 其他分享 >[AcWing 787]归并排序

[AcWing 787]归并排序

时间:2022-11-04 16:37:28浏览次数:44  
标签:归并 787 int 复杂度 mid logn 排序 AcWing

image


点击查看代码
#include<iostream>
using namespace std;

const int N = 100010;
int n;
int q[N], tmp[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(int i = l, j = 0; i <= r; i++,j++) q[i] = tmp[j];
}

int main(){
    cin >> n;
    for(int i = 0; i < n; i++) cin >> q[i];
    
    merge_sort(q, 0, n-1);
    
    for(int i = 0; i < n; i++) printf("%d ", q[i]);
    return 0;
}


/*
听课记录:
第一步:确定分界点 mid = (l+r)/2  是下标的中间值(而快排确定的是数组里面的一个值作为中间值)
第二步:递归排序 左边left 和 右边right
第三步:归并,把两个有序的数组合并为一个有序的数组 ---> 合二为一※  采用双指针算法  时间复杂度O(n)

归并排序是稳定的
快速排序是不稳定的  (但快排中Ai变成<Ai,i> 即双关键字排序 则是稳定的)

快速排序  平均时间复杂度O(n*logn)
归并排序  时间复杂度O(n*logn)
每一层是O(n) 共logn层 ---> O(n*logn)

*/

  1. 归并排序,先左右递归排序,再对左右进行归并
  2. 双指针算法进行归并,稳定性,设置中间数组变量暂存排序结果,归并过程时间复杂度为O(n)
  3. 归并排序时间复杂度为O(n*logn)

标签:归并,787,int,复杂度,mid,logn,排序,AcWing
From: https://www.cnblogs.com/starryWJ/p/16858242.html

相关文章

  • [AcWing 786]第k个数
       点击查看代码#include<iostream>usingnamespacestd;constintN=100010;intn,k;intq[N];intquick_sort(intl,intr,intk){if(l==r......
  • AcWing 1208. 翻硬币
    //转换为目标状态#include<iostream>#include<algorithm>#include<cstring>usingnamespacestd;constintN=110;charstart[N];//初始状态charaim[N];//目标......
  • 【AcWing-Linux】05. Git
    Git一、Git简介Git是一个分布式版本控制工具,通常对于软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种:本地仓库:开发人员自己电脑......
  • 2022-11-03 Acwing每日一题
    本系列所有题目均为Acwing课的内容,发表博客即是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我......
  • 【AcWing-Linux】04. SSH
    SSH(SecureShell,安全外壳协议)一、SSH简介SSH为建立在应用层和传输层基础上的安全协议(对数据进行加解密),专为远程登录会话和其他网络服务提供安全性的协议,可以有效防止......
  • AcWing 730. 机器人跳跃问题
    怎样使用二分来做;看题目是否具有二段性或者单调性;单调性属于二段性;怎样看单调性:初始时E0数学归纳法推出:Ei撇都是大于Ei的达到某一个值就一定能够成功,等于maxh;ret......
  • acwing298 围栏
    有 NN 块木板从左到右排成一行,有 MM 个工匠对这些木板进行粉刷,每块木板至多被粉刷一次。第 ii 个木匠要么不粉刷,要么粉刷包含木板 Si 的,长度不超过 Li 的连续的......
  • 基础算法篇——归并排序
    基础算法篇——归并排序本次我们介绍基础算法中的快速排序,我们会从下面几个角度来介绍快速排序:归并排序思想归并排序代码归并排序拓展归并排序思想我们首先来介绍......
  • 归并排序
    publicclassMergeSort{/***ans2:非递归实现*/publicstaticvoidmergeSort2(int[]array){if(array==null||array.length<2......
  • 787 逆序对的数量
    #include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=100010;intn;intq[N],tmp[N];LLmerge(intl,intr){if(l>=r)ret......