算法基础--05

版权声明:https://blog.csdn.net/Burgess_Lee https://blog.csdn.net/Burgess_Lee/article/details/83576681

时间很快,今天已经是2018年10月份的最后一天了,那么我们今天这篇博文介绍的则是算法中一些经典的排序算法。有兴趣的朋友,可以来观望观望,求围观。

好,下面我们开始正题部分。

第五章 排序算法

因为计算机可以进行高速的计算处理,所以非常擅长对大量数据按照一定的规则正确排序处理。

5.1 排列数据

排序是指对多个数据排序的顺序。

排序:按照某种事物的属性数据,为多个事务整理顺序的处理叫做排序。

排序的顺序:

       升序:从小到大的顺序

       降序:从大到小的顺序

5.2 排序算法

介绍几种经典的排序算法

1.桶排序

准备与待排序数组取数范围相同大小个数的木桶,利用这些木桶对数据进行保存排序。

2.选择排序

遍历数据,把数据中的最大值(或者最小值)与起始(或者末尾)数据进行交换

3.交换排序(冒泡排序)

对比相邻的两个数据,根据大小关系调整两个数据的顺序。

4.插入排序

把目标数据按照正确的大小顺序插入到相应的位置中。

5.希尔排序

把目标数据按照一定的个数分成几个区域 进行插入排序

6.归并排序

把目标数据分割成更小的部分进行排序,更小的部分正确排序之后再合并起来

7.快速排序

从目标数据中任意选取一个数据,以这个数据的值为分割点,把目标数据分割为两个部分。这样循环操作下去进行排序。

5.3 桶排序

最简单的排序算法之一。

首先需要准备“待排序数据”的“取值范围的个数”的木桶数组。这样,每个待排序数据都对应一个木桶的标号(数组下标)。我们从木桶的起始元素开始进行顺序处理,如果木桶下标对应一个待排序的数据,把这个数据按照出现次数取出来,就是排列好的数据了。

具体过程如下:

适用于数据取值范围较小的场合。

5.4 选择排序

每次找出一个最小(最大)值的排序算法

最容易理解的算法之一。

现实的场景如下:

思路如下:

准备保存一个排序数据的数组,把这个数组分成“已排序的部分”和“待排序的部分”,一开始前者是空的,后者是整个数组。

算法实例过程如下:

5.5 冒泡排序

进行相邻数据的交换的算法

核心就是比较相邻的两个元素的大小关系。

数据分成待排序部分和已排序部分组成,在开始之前,前者为空,待排序部分则是整个数组。

具体步骤如下:

算法演示过程如下:

5.6 插入排序

向有序数据里的正确位置插入数据的算法。

假设数据列D,前i-1个数据是已排序部分,那么把第i个数据按照大小关系插入到已排序的数据列中,依次完成排序的过程称为插入排序。

具体过程如下:

算法演示过程如下:

5.7 归并

就是把“几个已排序的数列”合并成“一个已排序的数列”的算法。

演示过程如下:

5.8 归并算法

利用归并进行排序的算法称为归并排序,先分割再合并。

步骤1:把数据列分割成两个部分。

把待排序的数据列平均分成两个数据列,把得到的数据列也平均分为两个数据列......不断地重复下去,直到分割后得到的数据列只剩下一个元素。

步骤2:对分割后的数据列进行归并。

把分割后得到的数据列不断地和相邻的数据进行归并,直到最终归并得到一个数据列

具体过程如下:

算法演示过程如下:

 5.9 希尔排序

改进排序效率

分组进行排序

把数据按照一定的间隔分割成不同的组,并且对每个组进行排序。

虽然算法稍微复杂,但是数值的交换处理更少,执行速度更快。

具体过程如下:

算法演示过程如下:

5.10 快速排序

最快的排序算法(言语有待于优化)

只需要最少的时间完成

思路:

       在快速排序中,首先我们从数据列中,任意选取一个数据P(基准数),接着我们把比P小的值和比P大的值分离出来,得到新的数据列。这样一来P在最终排列好的数据列中的位置就确定了。

算法演示过程如下:

专题5 把2的n阶乘的值记下来

猜你喜欢

转载自blog.csdn.net/Burgess_Lee/article/details/83576681