数据结构之算法排序与查询

当我们面临一堆数据时,我们就会想到如何对数据进行规范化的处理。首先肯定要将数据进行排序,一堆杂乱无章的数据肯定是不利于进行数据操作的,那么只有将数据进行科学、适当地进行排序,才能使数据在后续操作中更加快捷、方便和高效。

PS:本主题报告只在于告诉小白如何懂得算法排序与查询的简单原理,对于具体实现不加以过多的赘述。

接下来我将简单介绍八大排序算法

1.插入排序:简单插入排序、希尔排序

2.交换排序:冒泡排序、快速排序

3.选择排序:简单选择排序、堆排序

4.归并排序

5.基数排序

一、插入排序之简单插入排序

简单插入排序在往期的博客中本人介绍过,类似于大家斗地主,将混乱的手牌大到小或小到大理清楚。

基本原理:插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

二、希尔排序

希尔排序可以认为是一种升级版的快速排序。它引入了一个增量的概念。在简单插入排序中发现我们有些数据是不用进行扫描。因为每次进行简单插入排序时,都要从后往前进行扫描,这必然时间复杂度就会变大。

希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。

它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。

那么希尔排序就是为了减少时间复杂度,具体如何操作呢请看如下:

我们选择增量 gap=length/2,缩小增量以 gap = gap/2 的方式,用序列 {n/2,(n/2)/2...1} 来表示。

三、交换排序之冒泡排序

冒泡排序顾名思义就跟它的名字一样,就像吐泡泡一样,从大到小,一个一个往上冒。

算法步骤:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

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

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

PS:如果从头到尾的数据都没有进行交换,那么可以认为这个数据是有序的

 

 四、交换排序之快速排序

快速排序是冒泡排序的分而治之加递归的版本。它的排序速度是在所有排序中最快的。

快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。——《算法艺术与信息学竞赛》

那具体是如何实现的呢?

算法步骤:

  1. 从数列中挑出一个元素,称为 "基准"(pivot);(一般选最左边的为基准元素)

  2. 重新排序数列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值