博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大数据常用基本算法
阅读量:5820 次
发布时间:2019-06-18

本文共 2424 字,大约阅读时间需要 8 分钟。

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
6)对比每个相邻的元素,此时到第七个元素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}
思路:循环找到最小值落下

转载于:https://www.cnblogs.com/hsiehchou/p/10424495.html

你可能感兴趣的文章
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石 ...
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
Linux基础命令---rmdir
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
BigDecimal 舍入模式(Rounding mode)介绍
查看>>
开源 免费 java CMS - FreeCMS1.2-标签 infoSign
查看>>
开源 免费 java CMS - FreeCMS1.9 移动APP生成栏目列表数据
查看>>
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>