归并排序算法的基本步骤:

1、把0~length-1的数组分成左数组和右数组;
2、对左数组和右数组进行迭代排序;
3、将左数组和右数组进行合并,那么生成的整个数组就是有序的数据数组。


归并排序基本算法实现如下:

void _merge_data_in_array(int[] array, int start,int middle,int end){int[] mergeArray = null;int left = start;int right = end;int m = middle;int mid = middle + 1;int k = 0;while(left <= m && mid <= right){if(array[left] < array[mid]){mergeArray[k++] = array[left++];} else{mergeArray[k++] = array[mid++];}}while(left <= m){mergeArray[k++] = array[left++];}while(mid <= right){mergeArray[k++] = array[mid++];}for(int i = 0;i < k;i++){array[start + i] = mergeArray[i];}}

java代码实现如下:

public class Merge_Sort {public static void main(String[] args) {int[] array = {4,9,2,3,6,0,7,1,5};merge_sort(array,8);for (int i = 0; i < array.length; i++) {System. out.println(array[i]);}}//判断参数合法性,调用合并函数进行迭代操作public static void merge_sort(int[] array, int length){if(null == array && 0 == length){return;}_merge_sort(array,0,length - 1);}//进行迭代操作public static void _merge_sort(int[] array, int start,int end){while(start < end){int middle = start + ((end -start) >> 1);//求middle,没看懂
//                 int middle = (start + end) / 2;//对左数组进行迭代排序_merge_sort(array,start,middle);//对右数组进行迭代排序_merge_sort(array,middle + 1,end);//将迭代排序后的左数组和右数组进行合并_merge_data_in_array(array,start,middle,end);}}//对合并后的队列进行合并操作public static void _merge_data_in_array(int[] array, int start,int middle,int end){int[] mergeArray = null;int left = start;int right = end;int m = middle;int mid = middle + 1;int k = 0;while(left <= m && mid <= right){if(array[left] < array[mid]){mergeArray[k++] = array[left++];} else{mergeArray[k++] = array[mid++];}}while(left <= m){mergeArray[k++] = array[left++];}while(mid <= right){mergeArray[k++] = array[mid++];}for(int i = 0;i < k;i++){array[start + i] = mergeArray[i];}}}

时间复杂度

归并排序中可选区merge()函数内的“归并排序”作为基本操作。merge()函数的作用是将两个有序的序列归并为一个整体有序的序列。“归并操作”即为将待归并表中的元素复制到一个存储归并结果的表中的过程。在顺序表中,merge()函数的“归并操作”执行次数为要归并的两个子序列中元素个数之和。归并排序的时间复杂度和初始序列无关,平均情况下为O(nlogn){以2为底},最好情况下为O(nlogn){以2为底},最坏情况下为O(nlogn){以2为底}。


空间复杂度

因为归并排序需要转存整个待排序列,因此空间复杂度为O(n)

【大话数据结构算法】归并排序相关推荐

  1. 大话数据结构——算法

    算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作. 为什么把数据结构和算法一起说? 想想罗密欧与朱丽叶,梁山伯和祝英台,少了一个你总会觉得奇怪吧. ...

  2. 【大话数据结构算法】查找算法

    顺序查找 针对无序序列的一种最简单的查找方式. 算法思想: 从表中第一个记录开始,逐个与给定值进行比较,若某个记录的关键字和给定值相等,则查找成功:反之,若直到最后一个记录,其关键字和给定值都不相等, ...

  3. 【大话数据结构算法】直接选择排序

    选择类排序的主要动作是"选择",直接选择排序采用最简单的选择方式,从头至尾顺序扫描序列,找出最小的一个记录,和第一个记录交换,接着从剩下的记录中继续这种选择和交换,最终使序列有序. ...

  4. 【大话数据结构算法】直接插入排序

    直接插入排序的基本思想:每趟将一个待排元素作为关键字,按照其关键字值得大小插入到已经排好序的部分序列的适当位置,直到插入完成. 算法思想总结如下:(设待排序的数组为a[0-n-1]) 1.初始时,a[ ...

  5. 【大话数据结构算法】希尔排序

    希尔排序的实质就是分组插入排序,该方法又称为缩小增量排序. 直接插入排序适合于序列基本有序的情况,希尔排序的每趟排序都会使整个序列变得更加有序,等整个序列基本有序了,再来一趟直接插入排序,这样会使排序 ...

  6. 【大话数据结构算法】冒泡排序

    起泡排序又称为冒泡排序.它是通过一系列的"交换"动作完成的.首先将第一和第二个记录进行比较,如果第一个记录大于第二个记录,则两者交换位置,否则保持原位置不变:然后比较第二和第三个记 ...

  7. 【大话数据结构算法】快速排序算法

    快速排序是交换类的排序,比如在站队的时候,老师说:"第一个同学出列,其他同学以第一个同学为中心,比他矮的全排在左边,比他高的全排在右边."这就是一趟快速排序.可以看出,一趟快速排序 ...

  8. 【大话数据结构算法】哈夫曼树

    哈夫曼树又称为最优二叉树. 1.路径和路径长度 在一棵树中,从一个节点往下可以达到的孩子或者子孙节点之间的通路称为路径.通路中分支的数目称为路径长度.若规定根节点的层数为1,则从根节点 到第L层节点的 ...

  9. 大话数据结构及JAVA数据结构阅读笔记

    目录 一.大话数据结构随书阅读笔记 第一章 数据结构概述 第二章  算法概述 第三章 线性表 第四章 栈与队列 第五章 串 第六章 树 第七章 图 第八章 查找 第九章 排序 二.大话数据结构思维导图 ...

最新文章

  1. ArrayList的内存泄露
  2. Spring MVC集成slf4j-logback - 我想跟代码谈谈 - 博客频道 - CSDN.NET
  3. java Date.getTime()返回负数异常情况分析
  4. 2016年计算机视觉和图像处理相关的国际会议一览表
  5. 计算广告学(Computational Advertising)CA
  6. (十三)其他设计模式
  7. el-table中合并行加入图标
  8. 使用Lucene的新FreeTextSuggester查找长尾建议
  9. 自定义控件_VIewPager显示多个Item
  10. 【Redis3】基于Redis sentinel的自动failover主从复制
  11. PHP获取git提交信意_代码提交规范检查与修复 php_codesniffer + composer-git-hooks
  12. 验证服务器的通用性,通用VNFM部署的可行性分析与验证
  13. 安卓系统修改开机LOGO
  14. WAP1 X/WAP2 0以及WAP浏览器的协议版本
  15. 英特尔核显驱动hd630_hd630相当于什么显卡
  16. 开发游戏引擎需要具备什么
  17. drupal 8 php filter,Drupal 7 与 Drupal 8 的一些变化
  18. Detecting Novel Associations in Large Data Sets(检测 大型数据集中的信息关联性,数据相关性)
  19. [转载] 网络游戏程序员须知 调试多人联机游戏
  20. div和div之间画横线_HTML在两个div标签中间画一条竖线的方法

热门文章

  1. zabbix监控ntpd服务
  2. 又一访问access
  3. 第8部分 管理磁盘存储
  4. Java中如何获得集合变量的集合中的类型参数
  5. Google AI 教育项目今起免费开放,支持中文
  6. ELK技术栈—Logstash—Input插件
  7. “数据中台”是什么?
  8. jmeter控制器--if控制器
  9. Majority Element II
  10. MySQL存储过程和函数(一)