数据结构与算法之排序(上)

简单排序(冒泡、插入)

对于冒泡这个排序算法,相信大家都不陌生,所以我们更加深入的来看一下这个算法,讨论一下他的时间复杂度,最好情况是当所有元素都按升序排列好了,这个时候的时间复杂度是O(N),多少个元素就比较了多少次。为了不让排序无脑的进行下去,我们加了一个flag标记,排好序便会自动退出。最坏的情况下,都是逆序排的那么我们就得比较n*(n-1)/2次才能排好,此时的时间复杂度最坏是O(N2).
在这里插入图片描述
选择排序和冒泡排序不同,选择排序会通过一轮比较,选出最小的那个元素的下标,然后和第一个元素进行交换,这样第一个元素的位置就可以确定了。
第二轮如法炮制,从第二个元素开始依次比较,选出最小的元素的下标,和第二个元素交换位置,这样第二小的元素位置就确定了。
后面依次类推,直到整个数组呈现有序状态。
假设一个数组已经基本有序,则这个时候插入排序就是一个不错的选择。插入排序是先保证左边元素是基本有序的,然后将后面的元素依次和左边元素进行比较,如果比较到一个比自己小的元素时就可以停止比较了,因为左边已经呈现有序状态,找到比自己小的元素时,就不用再往后比较了。
在这里插入图片描述

希尔排序

希尔排序时要先选取一个间隔,对序列中以此为间隔的数进行排序,这些间隔会构成一个增量序列。注意,当你对下一个间隔排完序后,上一次间隔排序的结果是不会受到影响的(还是有序的)。当然,这个间隔序列最小的一定是一。

希尔排序解决了简单排序当中每次只能对相邻的两个元素进行比较,一轮比较只能消除一个逆序对,但是希尔排序的缺点还是有的,当间隔序列元素不互质且间隔内刚好是有序的,这时希尔排序很是鸡肋。
在这里插入图片描述
由此衍生出了许多间隔序列的选择方法

在这里插入图片描述

堆排序

堆排序就像是对选择排序的优化
在这里插入图片描述
堆中有一种能快速找到最小值的结构叫最小堆(小根堆),其堆顶是整个堆中最小的,而且在堆顶出堆之后恢复成最小堆的这么一个过程也是理想的。

归并排序

可见我往期博客

发布了32 篇原创文章 · 获赞 5 · 访问量 888

猜你喜欢

转载自blog.csdn.net/LebronGod/article/details/104492405