龙空技术网

归并排序、快速排序(通俗易懂)

追风sn 309

前言:

目前你们对“归并排序算法的空间复杂度”大概比较关怀,小伙伴们都想要了解一些“归并排序算法的空间复杂度”的相关文章。那么小编也在网络上汇集了一些有关“归并排序算法的空间复杂度””的相关文章,希望你们能喜欢,咱们快快来了解一下吧!

归并排序和快排都是比较重要而两种排序,尽量掌握他们!

掌握精髓

归并排序并没有前几种好理解,但是也不是很难,过程步骤简单,但是具体操作有点复杂。

将每对单个元素(默认情况下,已排序)归并为2个元素的有序数组; 将2个元素的每对有序数组归并成4个元素的有序数组,重复这个过程......; 最后一步:归并2个N / 2元素的排序数组(为了简化讨论,我们假设N是偶数)以获得完全排序的N个元素数组。归并排序是分而治之的排序算法,不停的递归归并这个过程,由无序到部分有序在到有序(配合下面动态过程来理解)

代码示例

过程比较多,可以自行查阅理解(仅供参考)

图形实例

排序过程(转自VisuAlgo)

好处、坏处

好处归并排序的好处是非常明显且优越的,最重要的部分是他的平均时间复杂度O(N log N)的性能保证,因此非常适合大量数据的处理,因为前面讲解的几种排序复杂度都是O(n^2),不在一个数量级上,相比之下增长的很慢,是比较排序算法里面能达到最高效率的,并且他还是一个稳定的排序,相同的两个元素排序完之后相对位置不发生改变(下面讨论为什么稳定)。

坏处:坏处就是他的空间复杂度是O(n)略高,说明排序过程中需要辅助空间

快速排序:

掌握精髓

为什么把他们两个放在一起讲,就是因为他们两个的排序逻辑都是分而治之,快排是另一种分而治之的排序。

在排序的过程中,需要先找一个关键数key来做比较的对象,接下来就是将比它小的数放到左边,比它大的数放到右边分成两个区域(需要两个标记记录分别从左和从右比较的动态位置),然后再对这两个区域进行上述同样的操作,用个简单的例子描述一下,3,2,1,4,第一个key是3,2向左边,1向左边,得到2,1,3,4,左边的区域就是2,1右边的就是4,重复这个步骤,左边的key是2,比较一次之后1,2,所以整体就变成了1,2,3,4排序完成。当然是数据多的时候原理一样,最好先定义排序方法,直接调用。

图形实例

匆忙画图,见谅

代码示例优点和缺点

优点就是他的名字,可以快速地进行排序,改进于冒泡排序,进行跳跃式的交换,减少了比较和交换的的次数,速度就变快了,平均时间复杂度O(nlogn),但是大多数时候比平均的要快,一般情况下,空间复杂度是O(logn),最坏的是O(n)。快速排序是一个不稳定的算法,在经过排序之后,可能会对相同值的元素的相对位置造成改变,快速排序基本上被认为是相同数量级的所有排序算法中,平均性能最好的

标签: #归并排序算法的空间复杂度