首页 > 其他分享 >归并排序

归并排序

时间:2024-01-24 23:22:25浏览次数:27  
标签:归并 res 复杂度 最小值 数组 排序

归并排序


 

 

做法


归并,基于分治,但是不同于快排

1.确定分界点,这回的分界点是固定的,是mid。=

2.排序左边和右边

3.归并

如图,红色箭头是该区间的最小值,假设答案数组res[]。如果A数组最小值比B数组最小值还小,把该值放入res[]。然后箭头向右移一位。继续这样比较

一个区间全部值取完了,一个数组剩下的值直接放入res[]后面即可。因为A数组最后一个数肯定比B数组剩下的数的开头的那个数要小,所以B剩下的所有数都是大于A最后一个数的,故没有影响

 

 举例


 

A={1,3,5,7,9}

B={2,4,5,8,10}

(举例时最好设置多几个相同的值,便于一般性)

 

先取1,然后取2,3,4,到5了,我们发现先取哪个都没事,所以继续,5(假设取的是A),5(B),7,8,9,10

举不举都差不多了,很好理解,并不是很抽象

但是从这里我们发现,这个排序是稳定的!因为每次都是有限考虑取A,后取B,所以不会改变数列顺序

 

时间复杂度


 

 递归先是n,再是一半,再是一半的一半

n什么时候除到1?那就是log n层,n为1啦

一共长度为n

所以时间复杂度为(nlogn),100%不会变动

 

 代码


 

标签:归并,res,复杂度,最小值,数组,排序
From: https://www.cnblogs.com/didiao233/p/17986130

相关文章

  • 快速排序
    快排 做法 快排,基于分治1.确定分界点,q[l],q[(l+r)/2],q[r],随机,四种都可以,但是推荐q[(l+r)/2]2.[重点]调整区间,划分2个区间,使得左半边所有的数<=x,右半边所有的数>=x,注意,x不一定在两个区间交界处,可能在很奇怪的位置3.递归处理左右两段 比较暴力的做法   先开......
  • KY207 二叉排序树C++
    考二叉搜索树的插入。#include<iostream>usingnamespacestd;structnode{intdata;structnode*left;structnode*right;};typedefstructnodetree;intmain(){intn;while(cin>>n){tree*root=NULL;while(n!=0......
  • 逆序对/归并排序
    逆序对定义:对于给定的一段正整数序列,逆序对就是序列中$a_i>a_j$且$i<j$的有序对。P1908逆序对-洛谷|计算机科学教育新生态(luogu.com.cn)#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=2e6+10;intn,m,a[N],c[N],res,num;void......
  • 洛谷题单指南-模拟和高精度-P1786 帮贡排序
    原题链接:https://www.luogu.com.cn/problem/P1786题意解读:此题比较简单,模拟+排序即可解决。需要注意的是,当帮贡或者等级相同时,都要保持原来的顺序,因此需要记录每个人的编号,便于排序。话不多说,直接上代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;constint......
  • 冒泡排序
    冒泡排序//e.g.设计一个函数实现冒泡排序,将一个整型数组排序voidBubble_Sort(int*arr,intsz)//arr是数组,对数组传参,传的是首元素地址&arr[0]{ //确定bubble排序的趟数 inti=0; intcount=0; for(i=0;i<sz-1;i++) { intflag=1; intj=0; for......
  • 用Java实现冒泡排序:实用教程带你入门
    在处理一些特定系统功能时,经常需要使用冒泡排序。例如,在一个电子商务网站中,需要对商品进行排序和过滤。这个时候可以使用冒泡排序对商品进行排序,以便用户能够按照价格、销量、评分等不同字段进行排序。通过使用冒泡排序,系统可以提供更加灵活和个性化的排序选项,以便用户能够更加方便......
  • 冒泡排序、选择排序、二分查找
    1publicstaticvoidmain(String[]args){2//冒泡排序3//定义一个数组,存储一些数据4int[]arr={5,3,1,2,9,6};5System.out.println("=========冒泡排序==========");6//定义一个循环轮数7fo......
  • Layui table 的排序问题
    tableautoSort:falsetabletdsort:true 多页监听排序时间table.on('sort(test)',function(obj){//注:tool是工具条事件名,test是table原始容器的属性lay-filter="对应的值"console.log(obj.field);//当前排序的字段名console.log(obj.type);//当前排序类型:desc(......
  • 问题:以下哪一类材料应按材料内容主次及材料之间联系排序---人力资源部()
    问题:以下哪一类材料应按材料内容主次及材料之间联系排序---人力资源部()A.第二类B.第三类C.第四类D.第五类参考答案如图所示......
  • 归并排序
    归并排序一、核心思想递归;分治;归并二、实现思路1、 相较于快速排序,归并排序将划分区间和排序两个操作在放在不同时间段上,也因此引出了归并的操作。基于此思想————先分再排顺便合并,应当首先使用递归来进行划分,划分标准直接从中间位置划分即可2、 划分之后,对于单个区间......