
排序算法
绘夜
这个作者很懒,什么都没留下…
展开
-
经典算法:堆排序
堆排序原创 2017-08-21 08:37:31 · 314 阅读 · 0 评论 -
排序算法3.5:希尔排序
简介希尔排序是插入排序的一种更高效的改进算法。对于插入排序来说,最好的情况是待排序数组本身已大部分有序或完全有序。此时进行排序接近线性排序,时间复杂度为O(n)。希尔排序的目的,就是将数组最后转换为这样的形式 ,使得插入排序的效率更高。先宏观调整,再微观调整。关于希尔排序中最重要的变量是步长,它是逐渐减小的,每一趟排序的步长都必定比上一趟小,最终成为1.根据步长将原数组分为小段,对每一...原创 2018-08-27 23:40:49 · 324 阅读 · 0 评论 -
排序算法4:归并排序
简介归并排序是冯诺依曼在1945年提出的一种有效的排序算法。它的时间复杂度是O(nlogn),空间复杂度O(n),它是一个稳定的排序。思想正如它的名字,归并排序是建立在归并操作上的。所谓归并就是将两个已排序序列合并成为一个序列的操作。对于归并我们使用一个函数(Merge)来实现,具体步骤如下:①首先申请空间,大小为两个已排序序列之和;②定义两个指针,分别指向两个序列的起...原创 2018-08-29 23:32:08 · 461 阅读 · 0 评论 -
排序算法3:插入排序,二分插入排序
简介插入排序是一种与冒泡、选择排序略微有些不同的排序算法。它的主要思想可以形象的模拟为打牌时从牌堆中抓牌后,整合入手牌中的过程。它的时间复杂度为O(n^2),最好情况下可以达到O(n)。空间复杂度为O(1),它是一种稳定的算法。思想我们前面讲的冒泡和选择排序它们都是外层使用for循环中的变量i来维护已排序的数字,然后在未排序数列中进行操作(冒泡是直接交换,选择是选出需要交换的元...原创 2018-08-26 23:08:51 · 1042 阅读 · 0 评论 -
排序算法2:直接选择排序
直接选择排序算法也是一种简单直观的算法,而且与冒泡排序算法只有一些小小的区别。它的时间复杂度是O(n^2),空间复杂度O(1),它是不稳定的排序。(在数组中不稳定,在链表中稳定)基本思想之所以叫它直接选择排序,是因为它的思想就是在每一趟排序中首先定义一个标识(该标识的位置就在未排序队列的队头)用来记录未排序序列中最大(小)值的所在位置,排序过程中直接将未排序序列中最大(小)的值选择...原创 2018-08-21 23:21:37 · 2444 阅读 · 0 评论 -
排序算法5:堆排序
简介堆排序是利用堆这种数据结构进行的排序。堆通常使用一维数组来实现,是一种近似完全二叉树的结构。堆排序分为大根堆和小根堆。堆排序满足这样的一个特性:大根堆父节点的值总是大于子节点,小根堆的父节点值总是小于子节点。思想我们在拿到一个数组时,首先将它构造成为一个大根堆/小根堆,这个过程我们叫做建堆。然后将根节点元素和最末尾元素交换,此时最末尾成为有序区。除去最末尾元素的剩下元素所构...原创 2018-09-05 16:48:05 · 417 阅读 · 0 评论