【算法学习】浅谈排序算法
2011-02-27 20:51
330 查看
排序算法主要有:插入排序,选择排序,冒泡排序,归并排序等,当然包括堆排序和二叉树排序,后两种算法很少用到。
各种排序算法之间的比较,主要从以下几个方面综合考虑:1.时间复杂性;2.空间复杂性;3.稳定性;4.待排序记录数n的大小;6.记录本身信息量的大小。
下面就这些方面逐一讨论,再综合得出结论。
时间复杂性
1、 直接插入排序
在直接插入排序中,共需要进行(n-1)次元素的插入,每一次插入最少需要比较一次和移动两次,最多需要比较(i+1)次,移动(i+2)次,平均需要比较1+i/2次和移动2+i/2次。因此直接插入排序的复杂度为o(n2)。
2、 堆排序,时间复杂度o(nlogn)
3、 冒泡排序
时间复杂度o(n2),很显然,冒泡排序是所有排序算法中,效率最低的,因为它需要更多的移动和比较。
4、 快速排序
顾名思义,它是目前所有排序算法中最快的一个,其实质是对冒泡排序的改进。
整个排序过程就好似把n个元素构成一棵二叉排序树的过程,时间复杂度O(nlogn)。
5、 归并排序
要考虑归并的次数和每一次的时间。显然要归并logn次,而每一次需要n的时间
所以,归并排序的时间复杂度为o(nlogn)。
总之,在最好情况下,直接插入排序和冒泡排序最快(正序)。在平均情况下,快速排序最快;在最坏情况下,堆排序和归并排序最快;(完全逆序)。
不稳定:快速排序,堆排序。
下面就以上三点,提出对排序算法的整体结论:
1. 当待排序数n较大,排序码分布较随机时,且对稳定性不做要求(很那掌握,一般情况下,如果数据范围小,就是在考察稳定性)。
2. 当n较大,而且要求稳定时,而且内存空间允许(注意,202)时,采取归并排序,但是代码复杂度较高。‘
3. 当排序数n较小,且要求稳定时,选择直接插入排序为宜。
根据经验,我们最常用的是快速排序,通常只是作为解决问题的一个步骤,不会有太
高的要求。堆往往是用作数据结构。如果数据范围很小,笔者建议以稳定性为重。
以上只是一些看法,理论性很强,下面会写一些具体应用。
各种排序算法之间的比较,主要从以下几个方面综合考虑:1.时间复杂性;2.空间复杂性;3.稳定性;4.待排序记录数n的大小;6.记录本身信息量的大小。
下面就这些方面逐一讨论,再综合得出结论。
时间复杂性
1、 直接插入排序
在直接插入排序中,共需要进行(n-1)次元素的插入,每一次插入最少需要比较一次和移动两次,最多需要比较(i+1)次,移动(i+2)次,平均需要比较1+i/2次和移动2+i/2次。因此直接插入排序的复杂度为o(n2)。
2、 堆排序,时间复杂度o(nlogn)
3、 冒泡排序
时间复杂度o(n2),很显然,冒泡排序是所有排序算法中,效率最低的,因为它需要更多的移动和比较。
4、 快速排序
顾名思义,它是目前所有排序算法中最快的一个,其实质是对冒泡排序的改进。
整个排序过程就好似把n个元素构成一棵二叉排序树的过程,时间复杂度O(nlogn)。
5、 归并排序
要考虑归并的次数和每一次的时间。显然要归并logn次,而每一次需要n的时间
所以,归并排序的时间复杂度为o(nlogn)。
总之,在最好情况下,直接插入排序和冒泡排序最快(正序)。在平均情况下,快速排序最快;在最坏情况下,堆排序和归并排序最快;(完全逆序)。
空间复杂性
所有排序方法可归为三类。归并排序单独归为一类。其空间复杂度为O(n);快速排也单独归为一类,其空间复杂度为o(logn)。其他排序算法的复杂度为o(1)。稳定性
稳定:直接插入排序,气泡排序和归并排序不稳定:快速排序,堆排序。
下面就以上三点,提出对排序算法的整体结论:
1. 当待排序数n较大,排序码分布较随机时,且对稳定性不做要求(很那掌握,一般情况下,如果数据范围小,就是在考察稳定性)。
2. 当n较大,而且要求稳定时,而且内存空间允许(注意,202)时,采取归并排序,但是代码复杂度较高。‘
3. 当排序数n较小,且要求稳定时,选择直接插入排序为宜。
根据经验,我们最常用的是快速排序,通常只是作为解决问题的一个步骤,不会有太
高的要求。堆往往是用作数据结构。如果数据范围很小,笔者建议以稳定性为重。
以上只是一些看法,理论性很强,下面会写一些具体应用。
相关文章推荐
- 浅谈算法和数据结构: 二 基本排序算法
- 算法学习小心得——基于比较的排序算法汇总
- 算法学习-排序算法-快速排序
- 学习算法第一篇:排序算法
- 算法学习之一 —— 七种排序算法及其时间复杂度
- 浅谈算法和数据结构: 二 基本排序算法
- 算法学习入门之使用C语言实现各大基本的排序算法
- 浅谈数据结构与算法分析学习及如何进行算法分析
- 算法学习一之常见的七大排序算法
- 【算法学习】排序算法-希尔排序
- 算法学习(1):排序算法-插入排序及python实现
- 经典算法学习:各种排序算法的模板类实现
- 用 Python 学习算法:初级排序算法
- 算法学习-排序算法
- 算法分析学习笔记(三) - 排序算法(上)
- 浅谈排序算法学习之希尔排序(三)
- 算法学习一:排序算法实现与算法性能分析
- 【算法学习】排序算法-堆排序
- 算法导论—排序算法学习(3)
- 算法学习第一章-----排序算法