几个排序算法总结,从冒泡到快速排序
来源:互联网 发布:微信 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为待排序的元素个数。
- 几个排序算法总结,从冒泡到快速排序
- 排序算法之--从冒泡排序到快速排序
- 冒泡、快速排序算法
- 【算法】 冒泡排序 & 快速排序
- 排序算法之从冒泡排序所想到的
- php排序算法(冒泡排序,快速排序)
- 排序算法快速排序和冒泡排序
- 排序算法总结---冒泡排序
- 排序算法总结:冒泡排序
- 【排序算法总结】冒泡排序
- 八大排序算法总结之一(冒泡排序,快速排序,直接插入排序,希尔排序)
- 八大排序算法总结之一(冒泡排序,快速排序,直接插入排序,希尔排序)
- 从三色旗算法到快速排序
- 快速排序算法从入门到提高
- 冒泡排序算法总结
- 冒泡排序算法总结
- 各种排序算法总结----基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 快速排序算法and冒泡排序算法
- [LeetCode][Java] Next Permutation
- python学习笔记——‘is’和‘==’的区别
- Power of Two
- 在Ubuntu 10.10下安装JDK配置Eclipse及Tomcat
- 程序员必知的8大排序(二)-------冒泡排序,快速排序(java实现)
- 几个排序算法总结,从冒泡到快速排序
- JQuery UI——自动完成组件
- Ubuntu系统上轻松截图的几种方法介绍
- 跟着实例学习设计模式(4)-抽象工厂(创建型)
- Ubuntu设置ROOT密码
- C语言动态分配内存知识
- Android用户界面基础
- POJ 3094 && HDU 2734 Quicksum(水~)
- Java 序列化对象的一个使用案例