一、[MR算法扩展之MergeSort归并排序][MR算法扩展之QuickSort快速排序]:Mergesort归并排序
二、合并

三、合并细节

### --- 不断地将当前序列平均分割成 2个子序列
~~~     直到不能再分割(序列中只剩 1个元素)### --- 不断地将 2个子序列合并成一个有序序列
~~~     直到最终只剩下 1个子序列
~~~     时间复杂度:O(nlogn)
~~~     空间复杂度:O(n)

四、QuickSort-快排

### --- 第一步
~~~     从数组中选择一个轴点元素(Pivot element),一般选择0位置元素为轴点元素### --- 第二步
~~~     利用Pivot将数组分割成2个子序列
~~~     将小于 Pivot的元素放在Pivot前面(左侧)
~~~     将大于 Pivot的元素放在Pivot后面(右侧)
~~~     等于Pivot的元素放哪边都可以(暂定放在左边)### --- 第三步
~~~     对子数组进行第一步,第二步操作,直到不能再分割(子数组中只有一个元素)

### --- 时间复杂度~~~     最坏情况:T(n)=T(n-1)+o(n)=o(n2)
~~~     最好情况:T(n)=2*T(n/1)+o(n)=o(nlogn)

### --- 空间复杂度~~~     由于递归调用,每次类似折半效果所以空间复杂度是O(logn)

二、编程代码
### --- MergeSortpackage com.yanqi;public class MergeSort<T extends Comparable<T>> extends Sort<T> {private T[] leftArray;@Overrideprotected void sort() {leftArray = (T[]) new Comparable[array.length >> 1]; //除2操作sort(0, array.length);}// T(n) = T(n/2) + T(n/2) + O(n)/*** 对 [begin, end) 范围的数据进行归并排序*/private void sort(int begin, int end) {if (end - begin < 2) {return;}int mid = (begin + end) >> 1;sort(begin, mid);sort(mid, end);merge(begin, mid, end);}/*** 将 [begin, mid) 和 [mid, end) 范围的序列合并成一个有序序列*/private void merge(int begin, int mid, int end) {int li = 0, le = mid - begin;int ri = mid, re = end;int ai = begin;// 备份左边数组for (int i = li; i < le; i++) {leftArray[i] = array[begin + i];}// 如果左边还没有结束while (li < le) { if (ri < re && cmp(array[ri], leftArray[li]) < 0) {array[ai++] = array[ri++];} else {array[ai++] = leftArray[li++];}}}
}

### --- QuickSortpackage com.yanqi;public class QuickSort<T extends Comparable<T>> extends Sort<T> {@Overridepublic void sort() {sort(0,array.length);}/*** 对 [begin, end) 范围的元素进行快速排序* @param begin* @param end*/public void sort(int begin, int end) {if (end - begin < 2) {return;}// 确定轴点位置 O(n)int mid = pivotIndex(begin, end);// 对子序列进行快速排序sort(begin, mid);sort(mid + 1, end);}/*** 构造出 [begin, end) 范围的轴点元素* @return 轴点元素的最终位置*/public int pivotIndex(int begin, int end) {// 备份begin位置的元素T pivot = array[begin];// end指向最后一个元素end--;while (begin < end) {while (begin < end) {if (cmp(pivot, array[end]) < 0) { // 右边元素 > 轴点元素end--;} else { // 右边元素 <= 轴点元素array[begin++] = array[end];break;}}while (begin < end) {if (cmp(pivot, array[begin]) > 0) { // 左边元素 < 轴点元素begin++;} else { // 左边元素 >= 轴点元素array[end--] = array[begin];break;}}}// 将轴点元素放入最终的位置array[begin] = pivot;// 返回轴点元素的位置return begin;}}

### --- Sortpackage com.yanqi;public class QuickSort<T extends Comparable<T>> extends Sort<T> {@Overridepublic void sort() {sort(0,array.length);}/*** 对 [begin, end) 范围的元素进行快速排序* @param begin* @param end*/public void sort(int begin, int end) {if (end - begin < 2) {return;}// 确定轴点位置 O(n)int mid = pivotIndex(begin, end);// 对子序列进行快速排序sort(begin, mid);sort(mid + 1, end);}/*** 构造出 [begin, end) 范围的轴点元素* @return 轴点元素的最终位置*/public int pivotIndex(int begin, int end) {// 备份begin位置的元素T pivot = array[begin];// end指向最后一个元素end--;while (begin < end) {while (begin < end) {if (cmp(pivot, array[end]) < 0) { // 右边元素 > 轴点元素end--;} else { // 右边元素 <= 轴点元素array[begin++] = array[end];break;}}while (begin < end) {if (cmp(pivot, array[begin]) > 0) { // 左边元素 < 轴点元素begin++;} else { // 左边元素 >= 轴点元素array[end--] = array[begin];break;}}}// 将轴点元素放入最终的位置array[begin] = pivot;// 返回轴点元素的位置return begin;}}

CC00050.hadoop——|HadoopMapReduce.V23|——|Hadoop.v23|MR算法扩展|MergeSort归并排序|相关推荐

  1. CC00046.hadoop——|HadoopMapReduce.V19|——|Hadoop.v19|MapReduce数据压缩机制|

    一.shuffle阶段数据的压缩机制 ### --- Hadoop当中支持的额压缩算法~~~ 数据压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输!! ~~~ 我们可以使用bin/hadoo ...

  2. CC00063.hadoop——|HadoopMapReduce.V34|——|Hadoop.v34|NamenodeFullGC-FullGC的影响|

    一.Namenode Full GC ~~~ [NamenodeFullGC-FullGC的影响] ~~~ [NamenodeFullGC-FullGC的日志分析] 二.JVM堆内存 ### --- ...

  3. CC00055.hadoop——|HadoopMapReduce.V27|——|Hadoop.v27|源码剖析|DataNode启动流程|

    一.[源码剖析之DataNode启动流程] :DataNode 启动流程 ### --- datanode的Main Class是DataNode,先找到DataNode.main()public c ...

  4. Hadoop 2.x MapReduce(MR V1)字数统计示例

    Before reading this post, please go through my previous post at "How MapReduce Algorithm Works& ...

  5. hive 运行命令后FAILED: Execution Error, return code 137 from org.apache.hadoop.hive.ql.ex ec.mr.MapredLoc

    FAILED: Execution Error, return code 137 from org.apache.hadoop.hive.ql.ex ec.mr.MapredLocalTask vi ...

  6. Hadoop开发 Hadoop视频教程 段海涛老师Hadoop完全攻克Hadoop视频教程 Hadoop开发

    最新在学习hadoop .storm大数据相关技术,发现网上hadoop .storm 相关学习视频少之又少,更可恶的是不少机构使用段海涛老师Hadoop视频进行商业买卖,气愤至急,我这里整理了传智播 ...

  7. Hadoop初级之Hadoop基本概念与应用前景

    Hadoop 大数据概念 大数据(big data):指无法在一定时间范围内用常规软件工具(例如java ee 中的mysql)进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞 ...

  8. Hadoop回顾:(一)Hadoop生态系统简介

    首先我们先了解一下Hadoop的起源.然后介绍一些关于Hadoop生态系统中的具体工具的使用方法.如:HDFS.MapReduce.Yarn.Zookeeper.Hive.HBase.Oozie.Ma ...

  9. 大数据框架Hadoop篇之Hadoop入门

    1. 写在前面 今天开始,想开启大数据框架学习的一个新系列,之前在学校的时候就会大数据相关技术很是好奇,但苦于没有实践场景,对这些东西并没有什么体会,到公司之后,我越发觉得大数据的相关知识很重要,不管 ...

最新文章

  1. 中国电子学会图形化四级编程题:绳子算法
  2. 活动报名 | 智源重大研究方向“人工智能的认知神经基础”发布会
  3. 【arduino】arduino ISP下载程序方法,用arduino uno给M5 Module DC MOTOR下载程序
  4. 计算机二级没过学校要重修吗,如果学校说计算机二级没过不给发学位证改怎么办...
  5. 初学__Python——Python数据类型之数字
  6. 用 Ubuntu 重置 Windows 密码
  7. AppWidget应用(一)---创建一个appWidget
  8. springboot2 war页面放在那_Spring Boot2版的权限管理系统
  9. SwiftUI AsyncImage cancelled 无法加载图片
  10. Tableau可视化学习笔记:day05-06
  11. spring-boot-starter-parent和spring-boot-dependencies的作用
  12. c#实现简单学生信息管理系统
  13. 全国计算机等级考试一级模拟考,全国计算机等级考试一级模拟试题一
  14. 数据可视化——tableau 数据报表样例(报表模板)
  15. .net mvc 文件压缩打包下载
  16. c语言对企业有什么作用,C语言企业级的需要学习的知识
  17. mac系统命令行如何创建文件夹 如何移动文件
  18. 冒死改造好基友小黄鸭,结果出乎意料?!
  19. Pr学习(3)AI CC2017/2018 如何破解?
  20. 【SHOI2001】洛谷2530 化工厂装箱员

热门文章

  1. 启智社区“我为开源狂”第六期活动小白教程之基础活跃榜
  2. 用python实现bt下载_【图片】分享一段功能非常简陋的python代码实现下载free种【pt吧】_百度贴吧...
  3. 蓝桥杯Java大学C组近三年真题解析(三)——暴力、模拟题
  4. 华北水利水电大学c语言实验报告4
  5. Android,Java ADPCM解码
  6. 微信小程序-仿QQ音乐
  7. 思泰克新三板募资1187万元 银河证券参与认购
  8. echart地图下钻上钻 地图分级 省市区
  9. linuxonandroid ubuntu12.04-v4-core启动文件(N7100 Android 4.3)
  10. 解码“真快乐”APP,它不止是娱乐零售赛道的尖兵