CC00050.hadoop——|HadoopMapReduce.V23|——|Hadoop.v23|MR算法扩展|MergeSort归并排序|
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
### --- 不断地将当前序列平均分割成 2个子序列
~~~ 直到不能再分割(序列中只剩 1个元素)### --- 不断地将 2个子序列合并成一个有序序列
~~~ 直到最终只剩下 1个子序列
~~~ 时间复杂度:O(nlogn)
~~~ 空间复杂度:O(n)
![](/assets/blank.gif)
### --- 第一步
~~~ 从数组中选择一个轴点元素(Pivot element),一般选择0位置元素为轴点元素### --- 第二步
~~~ 利用Pivot将数组分割成2个子序列
~~~ 将小于 Pivot的元素放在Pivot前面(左侧)
~~~ 将大于 Pivot的元素放在Pivot后面(右侧)
~~~ 等于Pivot的元素放哪边都可以(暂定放在左边)### --- 第三步
~~~ 对子数组进行第一步,第二步操作,直到不能再分割(子数组中只有一个元素)
![](/assets/blank.gif)
### --- 时间复杂度~~~ 最坏情况:T(n)=T(n-1)+o(n)=o(n2)
~~~ 最好情况:T(n)=2*T(n/1)+o(n)=o(nlogn)
![](/assets/blank.gif)
### --- 空间复杂度~~~ 由于递归调用,每次类似折半效果所以空间复杂度是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归并排序|相关推荐
- CC00046.hadoop——|HadoopMapReduce.V19|——|Hadoop.v19|MapReduce数据压缩机制|
一.shuffle阶段数据的压缩机制 ### --- Hadoop当中支持的额压缩算法~~~ 数据压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输!! ~~~ 我们可以使用bin/hadoo ...
- CC00063.hadoop——|HadoopMapReduce.V34|——|Hadoop.v34|NamenodeFullGC-FullGC的影响|
一.Namenode Full GC ~~~ [NamenodeFullGC-FullGC的影响] ~~~ [NamenodeFullGC-FullGC的日志分析] 二.JVM堆内存 ### --- ...
- CC00055.hadoop——|HadoopMapReduce.V27|——|Hadoop.v27|源码剖析|DataNode启动流程|
一.[源码剖析之DataNode启动流程] :DataNode 启动流程 ### --- datanode的Main Class是DataNode,先找到DataNode.main()public c ...
- Hadoop 2.x MapReduce(MR V1)字数统计示例
Before reading this post, please go through my previous post at "How MapReduce Algorithm Works& ...
- 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 ...
- Hadoop开发 Hadoop视频教程 段海涛老师Hadoop完全攻克Hadoop视频教程 Hadoop开发
最新在学习hadoop .storm大数据相关技术,发现网上hadoop .storm 相关学习视频少之又少,更可恶的是不少机构使用段海涛老师Hadoop视频进行商业买卖,气愤至急,我这里整理了传智播 ...
- Hadoop初级之Hadoop基本概念与应用前景
Hadoop 大数据概念 大数据(big data):指无法在一定时间范围内用常规软件工具(例如java ee 中的mysql)进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞 ...
- Hadoop回顾:(一)Hadoop生态系统简介
首先我们先了解一下Hadoop的起源.然后介绍一些关于Hadoop生态系统中的具体工具的使用方法.如:HDFS.MapReduce.Yarn.Zookeeper.Hive.HBase.Oozie.Ma ...
- 大数据框架Hadoop篇之Hadoop入门
1. 写在前面 今天开始,想开启大数据框架学习的一个新系列,之前在学校的时候就会大数据相关技术很是好奇,但苦于没有实践场景,对这些东西并没有什么体会,到公司之后,我越发觉得大数据的相关知识很重要,不管 ...
最新文章
- 中国电子学会图形化四级编程题:绳子算法
- 活动报名 | 智源重大研究方向“人工智能的认知神经基础”发布会
- 【arduino】arduino ISP下载程序方法,用arduino uno给M5 Module DC MOTOR下载程序
- 计算机二级没过学校要重修吗,如果学校说计算机二级没过不给发学位证改怎么办...
- 初学__Python——Python数据类型之数字
- 用 Ubuntu 重置 Windows 密码
- AppWidget应用(一)---创建一个appWidget
- springboot2 war页面放在那_Spring Boot2版的权限管理系统
- SwiftUI AsyncImage cancelled 无法加载图片
- Tableau可视化学习笔记:day05-06
- spring-boot-starter-parent和spring-boot-dependencies的作用
- c#实现简单学生信息管理系统
- 全国计算机等级考试一级模拟考,全国计算机等级考试一级模拟试题一
- 数据可视化——tableau 数据报表样例(报表模板)
- .net mvc 文件压缩打包下载
- c语言对企业有什么作用,C语言企业级的需要学习的知识
- mac系统命令行如何创建文件夹 如何移动文件
- 冒死改造好基友小黄鸭,结果出乎意料?!
- Pr学习(3)AI CC2017/2018 如何破解?
- 【SHOI2001】洛谷2530 化工厂装箱员
热门文章
- 启智社区“我为开源狂”第六期活动小白教程之基础活跃榜
- 用python实现bt下载_【图片】分享一段功能非常简陋的python代码实现下载free种【pt吧】_百度贴吧...
- 蓝桥杯Java大学C组近三年真题解析(三)——暴力、模拟题
- 华北水利水电大学c语言实验报告4
- Android,Java ADPCM解码
- 微信小程序-仿QQ音乐
- 思泰克新三板募资1187万元 银河证券参与认购
- echart地图下钻上钻 地图分级 省市区
- linuxonandroid ubuntu12.04-v4-core启动文件(N7100 Android 4.3)
- 解码“真快乐”APP,它不止是娱乐零售赛道的尖兵