饥人谷技术博客我爱编程

排序算法(初级)

2018-07-22  本文已影响123人  长鲸向南

一、概念

我们接下来排序所使用的算法大类似分治法:把一个问题分区成互相独立的多个部分分别求解的思路,以便于进行并行计算。

二、排序算法

1、冒泡排序(Bubble sort)

重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

image

作者想你扔了一个链接并不想告诉你这是动画可视化数据结构和算法~

伪代码:

image

流程图:


2018-7-19-21-15-15.png

2、选择排序(selection sort)

image

如图所示,是寻找最小值,相当于每轮都要和每一个元素进行对比得出最小值放入有序区。

伪代码:

2327.png

流程图:

2018-7-2-16-5-51.png

3、扑克牌算法(insertion sort)

插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成。

插入排序,为啥我们叫它扑克牌算法,来我们想一下我们打扑克牌的过程:

image

换成我们的语言也一样

结合动图一起看,是不是那么一回事~

image

4、快排法(Quick sort)

快速排序是目前在实践中非常高效的一种排序算法,它不是稳定的排序算法,平均时间复杂度为O(nlogn),最差情况下复杂度为O(n^2)。

基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

image

根据动图我们很好理解,第一次以15为基准,分了左右两个区,接着是5,4,3依次为基准,最终确定了右边的序列,接着在来分左边区,步骤一样。排序就完成啦。

5、计数排序(Counting Sort)

我在此之前介绍的排序是比较排序,需要两两比较的,但是计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外的桶内。

image

伪代码:

image

6、 桶排序 (Bucket sort)

桶排序的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序。

和计数排序的区别就在于桶,桶排序是每个桶是一个值,而这里是一个范围,同时桶排序还需要在桶内进行二次排序。

7、基数排序(Radix sort)

我们设想一下,假如我们要排序1-10万,难道我们还要排10万个桶吗?

所以我们就可以使用基数排序,它是基于进制的一个排序。

基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。

image

8、堆排序

我们先来了解一下几个概念

最大堆:

最大堆调整:保持最大堆性质,是创建最大堆的核心子程序

堆排序则是利用了最大堆可以记录最大值这样一个特性。

image

以上~~ 欢迎纠错~

上一篇下一篇

猜你喜欢

热点阅读