几个排序算法总结,从冒泡到快速排序

来源:互联网 发布:微信 java api 编辑:程序博客网 时间:2024/06/05 17:40

首先是排序的复杂度达到O(n*n)的几种算法,主要是冒泡、选择、插入这三种算法。实现的代码及其注释在本博客此处:简单排序算法

研究算法的目的就是为了提高性能,所以想到能么降低算法的复杂度。

首先是希尔排序是一种不稳定的排序算法,其复杂度取决于增量变量的选取,这里可以使得算法最好可以达到O(n*logn),最坏的情况就是O(n*n)。希尔排序完成了第一次突破,使得算法复杂度从O(n*n)降低下来成为可能。希尔排序的思想及其算法实现在本博客此处:希尔排序

前面学习树的一些东西,就会思考能不能使用树的思想进行排序,这就是堆排序算法,利用一种新的数据结构,利用大顶堆或者小顶堆实现排序,其算法的复杂度为O(n*logn),关于堆排序的实现在本博客此处:堆排序

希尔排序里面提到一个分组的思想,使得每次分组的元素有序,最终使得整个序列基本有序,最后完成一次直接插入。这里提出一个分组的思想很好,对其进行延伸,找到一种新的排序算法,就是归并排序,是一种稳定的排序算法,其算法复杂度可以达到O(n*logn),关于归并排序的实现在本博客此处:归并排序

分组思想的另一种算法就是快速排序,每次寻找关键值,分为两组,前半部分全部小于关键值,后半部分全部大于关键值。从快速排序算法的思想中可以看出,此算法寻找关键值的过程是不定的,每次分组的长度不定,故而是一种不稳定的算法,最好O(n*logn),最坏O(n*n),平均的复杂度达到O(n*logn)。关于快速排序的实现在本博客此处:快速排序

以上就是7种常见的内排序算法~需要仔细斟酌~

其实排序算法不只这些,还有一种基数排序算法(也叫桶排序算法),这里就介绍下其算法思想:其主要是按照待排序元素的个位、十位、百位、。。。分别进行分组(或者叫做装桶),按照元素的各个位来排序,那么就想到有按照高位(MSD)或者按照低位(LSD),这里说下说下LSD,首先按照个位上的数字进行分组,分为10组(0~9),分组完成后把这10组元素顺序连接起来,然后再按照十位上的数字进行分组,然后再连接起来,直到所有的位数都完成,完成基数排序。可以看出算法的复杂度为O (nlog(r)m),这里的r为基数,也就是个十百千。。。blabla有多少个,m为堆数,n为待排序的元素个数。



0 0
原创粉丝点击