排序算法
Posted oaoa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法相关的知识,希望对你有一定的参考价值。
1、直接插入排序:
从后面的序列中先把第一个数字提出来,然后拿第二个数字和它比较,如果大则放在右面,如果小则排在左面,排好之后,再把第三个数字排好的数字从右往左依次比较,找到适合的位置插入 平均时间复杂度O(n2)。
2、折半插入排序:
注意! 折半插入是把新的元素插入到一个已经有序的序列中思路类似于二分查找,每次取中间的作比较,直到最后找到合适的位置插入就行了。
3、希尔排序:
首先先了解排序算法的稳定性:如果队列中存在两个相等的数字排序过程中 这两个数字的先后顺序如果不会发生变化 就叫做稳定的排序反之叫做不稳定。希尔排序向下取整
个人理解: 希尔排序就是直接插入排序的2.0版本,希尔排序本身就属于插入排序,如果直接用直接插入排序可能时间复杂度太高,而经过希尔排序前面的这一系列分组排序,再分组再排。这样处理的话,可以减少工作量,从而减少复杂度。
4、快速排序:
因为用到了递归,所以平均时间复杂度为O(nlog2n),空间复杂度O(log2n)从左往右扫描,同时从右往左扫描。 以49 38 65 97 76 13 27为例子
把第一个数字作为基准 然后从右往左开始找第一个比49小的数,然后把这个数移动到i的位置所以j的位置现在是空的
接下来让i往右移动,找到第一个比49大的,然后把这个数移动到j的位置,这个时候i就变成空的
接下来重复上面的操作开始移动j,最后i和j会汇合,此时ij上面的块是空的,然后把49放进去,这样左边都比49小,右边都比49大。
接下来就把49左边和右边看成两个整体,重复上面操作,还是各自以第一个为数字为基准。最终得到有序序列。
5、简单选择排序
就是扫描无序的序列,每次找出来最小的哪一个放到最前面,然后再从后面找出最小的排在前面那个元素后面。直到扫描了全部的元素。时间复杂度为O(n2)
6、堆排序
完全二叉树有个特性:左边子节点位置=当前父节点的两倍+1,右边子节点位置=当前父节点的两倍+2
堆排序是将数据看成是完全二叉树、根据完全二叉树的特性来进行排序的一种算法
适合类型的堆来进行排序:升序—使用大顶堆 降序—使用小顶堆
个人理解:堆排序每一趟只能选出了一个最大值或者最小值,然后把剩下的再次建堆,再选,这样一轮一轮下来,最后就排好了。
以最大堆为例子:
7、二路归并排序
思想:采用分治的方法,把一个大的待排序列,分成n个小组,每一个小组进排序,然后逐步把小组合并,最后形成一个大的有序序列组。
图例:
合并两个有序数组的流程:
8、基数排序(也称桶排序)
思想:利用关键字来排序,这个关键字可以你根据特征来定。
基数排序中:先进入的先出来,比如32、42都被分在4中,32先进那么读的时候,就要先读32
以上是关于排序算法的主要内容,如果未能解决你的问题,请参考以下文章