归并排序,同样是利用分治思想的典型算法例子,下面简单总结下归并排序。

一、归并的概念

归并是这样一种概念,它针对两个或者多个有序的数组,是合并这多个有序数组并进行排序的一种手段,它的主要处理方法是每次都找出比较各个数组的首个元素(假设从左边开始排序而且是升序的方式),找出他们之间的最小值,将其拷贝到一个新的数组上,依次类推直到所有元素处理完,看说明图:

归并很好地利用了两个数组均是有序的这个条件,合并两个数组,大概只需要2n次比较即可(n是较小数组的长度),下面贴上归并的算法代码:

//归并方法

public static void mergeAB(int [] arrA,int [] arrB,int[] arrC){

//循环遍历两个需要归并的数组

for(int a=0,b=0,c=0;c

//判断两个数组是否对应遍历完成

if(a==arrA.length){

//遍历完成A数组,则对应B中的元素只需要直接复制到C数组中

arrC[c++] = arrB[b++];

continue;

}

if(b==arrB.length){

arrC[c++] = arrA[a++];

continue;

}

//如果两个数组都没有遍历完,则进行比较操作

arrC[c++] = arrA[a]

}

}

二、归并排序

归并排序是利用分治的思想进行递归归并的过程,递归过程不断对数组进行拆分,直到可以直接归并为止(可以认为是要处理的元素只有两个元素的时候,也可以认为是一个元素的时候)。其实理解了分治思想,归并排序理解起来还是挺简单的,下面简单贴上算法:

//归并排序方法

public static int [] guiBingSort(int [] arr,int l,intr){

//确定递归停止条件

if(l==r){

return new int[]{arr[r]};

}

//分两部分进行递归操作

int [] result1 = guiBingSort(arr, l, l+(r-l)/2);

int [] result2 = guiBingSort(arr, l+(r-l)/2+1, r);

//result1和result是已经排好序的数组,进行归并操作即可

int [] rtn = new int[result1.length +result2.length];

mergeAB(result1, result2, rtn);//调用归并方法

//返回归并结果

returnrtn;

}

三、归并排序的特征

归并排序大概有一下特征:

1、它是稳定的排序算法,不改变元素之间的相对位置;

2、归并排序的比较次数和元素的初始顺序无关,而且都是nlogn次;

3、归并排序需要的内存空间是N的常数倍,所以它比较消耗内存空间。

mysql 的 归并排序_归并与归并排序相关推荐

  1. 算法——归并和归并排序

    一.归并 假设现在的列表分两段有序,如何将其合成为一个有序列表.这种操作称为一次归并. 1.归并过程图示 当一个列表两段有序合并为一个有序列表的一次归并的过程如下: 将列表分为两段,两个箭头分别指向每 ...

  2. 归并排序及“归并”思想的应用

    本文讲解归并排序及"归并"思想的两个应用:小和问题,逆序对问题. 归并排序 提起归并排序,大家可能都会想到下图: 所谓归并,是指将两个有序数列合并为一个有序数列. 归并排序是利用归 ...

  3. 归并排序算法、多路归并排序

    1. 归并排序 base case:if(left>=right) return; 归并排序左半边,归并排序右半边,合并 void merge_sort(vector<int> &a ...

  4. 安装mysql无法登录_【windows 下安装 mysql-server 无法登录问题解决】

    ----------------------------- 无感的首行 ----------------------------- 新版 mysql-server 5.7 安装后发现无法使用 mysq ...

  5. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  6. MySQL学习笔记_上(select查询)

      上次整理了一些练习发到博客上了,也说要发基础的,整理了一下午才算是把查询那块的勉强整理完,下次再整理其他的,另外还在写设计模式和数据结构的草稿,写的差不多会慢慢发的,这两项算是副线发展,主线还是按 ...

  7. 归并排序 c++_数据结构:排序(4)||有序表的归并(归并排序)、基数排序

    归并排序 归并排序想必大家并不陌生,它的算法思路也十分清晰,且很容易发现,它是可以递归的: 对于有序表的归并算法:依次比较有序表表首,将表首元素插入新数组,移动表首指针,再更改原数组中元素. #inc ...

  8. java多线程实现归并排序_利用多线程对数组进行归并排序

    多线程处理归并排序的方法一般为: 假设有n个线程同步处理,就将数组等分成n份,每个线程处理一份,再对最后n个有序数组进行归并. 为了使对整个算法具有可扩展性,即线程数n可以自定义,笔者将线程类.处理数 ...

  9. 实现二分归并排序算法_如何实现归并排序?

    归并排序 归并排序是分而治之的排序算法. 划分步骤很简单:将当前数组分成两半(如果N是偶数,则将其完全平等,或者如果N是奇数,则一边稍大于一个元素),然后递归地对这两半进行排序. 递归写法 归并排序递 ...

最新文章

  1. [数字图像处理]图像去噪初步(2)--非线性滤波器
  2. 杂项-Log:NLog
  3. 互联网公司之外,银联等大型企业是如何玩转软件研发的?
  4. 做项目管理PM人的特质
  5. linux查找特定类型的文件中是否包含特定字段
  6. 中国大学MOOC-陈越、何钦铭-数据结构-2019春期末考试(题目+部分解答)
  7. sha-1算法的实现 c语言,SHA-1算法的C语言实现
  8. php中的oop,在现有PHP中加入OOP
  9. 虚拟机禅道服务器ip,Linux系统(虚拟机)安装禅道
  10. Java实现的基于socket的一次通信
  11. C# Note21: 扩展方法(Extension Method)及其应用
  12. requestLayout invalidate postInvalidate
  13. vue cli3.0 解决跨域问题和axios等问题,配合Django
  14. BZOJ 1189([HNOI2007]紧急疏散evacuate-网络流二分+拆点)
  15. W10电脑U盘插入电脑不显示盘符但是“安全删除硬件并弹出媒体”中却有该U盘
  16. Arm V8内存管理架构.学习笔记
  17. WGCLOUD在windows部署运行怎么实现隐藏窗口
  18. 如何禁止IE浏览器访问我的网页
  19. 二分算法详解:整数二分及浮点数二分算法(Binary Search)(含算法模板)
  20. 关于DPABI头动参数问题

热门文章

  1. 【BOE】pacing 报文发送
  2. WeekFi Recap!属于 Loot 的一周
  3. 计蒜客 - 44154 Historical TV Remote Control (思维)
  4. Cannot create property ‘xxx参数名‘ on string 这个问题结局办法
  5. Fabric-blockchain-explorer-区块浏览器
  6. 【数据库】LDAP 的概念与 Spring LDAP 框架使用
  7. canpcb阻抗_克服CAN设计挑战:CAN信号终端电阻篇
  8. x710 offload QinQ 报文 vlan 并支持 rss hash 到多队列
  9. STM32 四轴无人机的设计——处理遥控器PPM信号
  10. 何时使用PostMapping和GetMapping