大数据常用基本算法


1、冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法,它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有
相邻元素需要交换,也就是说该元素已经排序完成这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序

冒泡排序算法的原理如下:
1)比较相邻的元素。如果第一个比第二个大,就交换他们两个

2)对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数

3)针对所有的元素重复以上的步骤,除了最后一个

4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

列如:
数组元素>
5 1 7 2 6 4 3 16

1)由于第一个元素5比第二个元素大1,交换它们的位置。
1 5 7 2 6 4 3 16

2)对比每个相邻的元素,此时到第二个元素5与第三个元素7,不交换位置
1 5 7 2 6 4 3 16

3)对比每个相邻的元素,此时到第三个元素7与第四个元素2,交换位置
1 5 2 7 6 4 3 16

4)对比每个相邻的元素,此时到第四个元素7与第五个元素6,交换位置
1 5 2 6 7 4 3 16

5)对比每个相邻的元素,此时到第五个元素7与第六个元素4,交换位置
1 5 2 6 4 7 3 16

6)对比每个相邻的元素,此时到第六个元素7与第七个元素3,交换位置
1 5 2 6 4 3 7 16

7)对比每个相邻的元素,此时到第七个元素7与第八个元素16,不换位置
1 5 2 6 4 3 7 16

2、双冒泡排序

双向冒泡算法,极大的减少了循环排序的次数
1)传统冒泡气泡排序的双向进行,先让气泡排序由左向右进行,再来让气泡排序由右往左进行,如此完成一次排序的动作

2)使用left与right两个旗标来记录左右两端已排序的元素位置

3)当往左递进left >=往右递进的 right时,则排序完成
例子如下所示:
排序前:45 19 77 81 13 28 18 19 77 11
往右排序:19 45 77 13 28 18 19 77 11 [81]
向左排序:[11] 19 45 77 13 28 18 19 77 [81]
往右排序:[11] 19 45 13 28 18 19 [77 77 81]
向左排序:[11 13] 19 45 18 28 19 [77 77 81]
往右排序:[11 13] 19 18 28 19 [45 77 77 81]
向左排序:[11 13 18] 19 19 28 [45 77 77 81]
往右排序:[11 13 18] 19 19 [28 45 77 77 81]
向左排序:[11 13 18 19 19] [28 45 77 77 81]
此时28>=19条件成立排序完成

3、快速排序

快速排序(Quicksort)是对冒泡排序的一种改进快速排序的基本思想:
首先选取一个记录作为枢(shu)轴,不失一般性,可选第一个记 录,依它的关键字为基准重排其余记录,将所有关键字比它大的记录都安置在它之后,而将所有关键字比它小的记录都安置在之前,由此完成一趟快速排序;之后,分别对由一趟排序分割成的两个子序列进行快速排序,在大数据情况下要使用快速排序

列如:
数组元素>
5 1 7 2 6 4 3 16

思路:
取第一个数,把小于它的数往左移动,把大于它的数右移动
1)最左侧大于5的为7,最右侧小于5的为3,7与3对调
以5为枢轴>
5 1 3 2 6 4 7 16

2)全部对调完成,此时左侧小于5,右边大于5
5 1 3 2 | 6 4 7 16

3)5移动到分割位置
1 3 2 5 6 4 7 16

4)如果把数组元素分为三部分的话 左侧<中间<右侧
1 3 2 | 5 | 6 4 7 16
此时只需对两侧再重复以上操作就可以了

5)重复以上操作
1 3 2 >
1 2 3
此时左侧
6 4 7 16 >
4 6 7 16
简单来说:定义基数,比它小的往左排,比它大的往右排

4、归并排序

归并排序(MERGESORT)
是建立在归并操作上的一种有效的排序算法,该算法是采用
分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

归并操作(merge),也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法
如 设有数列1 8 2 9 3 5 6 4 10

1)第一次归并后:{1 8},{2 9},{ 3 5},{ 4 6},{10}此时两两元素排序完的归并

2)第二次归并后:{1 2 8 9},{ 3 4 5 6} ,{10}此时两两元素归并
1与2 寻找最小数 1
8与2 寻找最小数 2
8与9寻找最小数 8
{1 2 8 9}

3)第三次归并后:{1 2 3 4 5 6 8 9} , {10}此时两两元素归并
1与3寻找到最小数1 {1}
2与3寻找最小数2 {1 2}
8与3寻找最小数3 {1 2 3}
8与4寻找最小数4 {1 2 3 4}
8与5寻找最小数5 {1 2 3 4 5}
8与6寻找最小数6 {1 2 3 4 5 6}
8 9 落下{1 2 3 4 5 6 8 9}
4)第四次归并后:{1 2 3 4 5 6 8 9 10}
思路:循环找到最小值落下


文章作者: 谢舟
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 谢舟 !
 上一篇
Zookeeper介绍 Zookeeper介绍
ZooKeeper官网:http://zookeeper.apache.org/介绍:Apache ZooKeeper致力于开发和维护开源服务器,实现高度可靠的分布式协调 ZooKeeper是一种集中式服务,用于维护配置信息,命名,提供分布
2019-02-21
下一篇 
数据压缩、数据倾斜join操作 数据压缩、数据倾斜join操作
1、数据压缩发生阶段 端 操作 Col3 数据源 》数据传输 数据压缩 mapper map端输出压缩 》数据传输 数据压缩 reducer reduce端输出压缩 》数据传输 数据压缩 结果数据
  目录