您的位置:首页 > 其它

【算法学习】浅谈排序算法

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)。

总之,在最好情况下,直接插入排序和冒泡排序最快(正序)。在平均情况下,快速排序最快;在最坏情况下,堆排序和归并排序最快;(完全逆序)。

空间复杂性

所有排序方法可归为三类。归并排序单独归为一类。其空间复杂度为O(n);快速排也单独归为一类,其空间复杂度为o(logn)。其他排序算法的复杂度为o(1)。

稳定性

稳定:直接插入排序,气泡排序和归并排序

不稳定:快速排序,堆排序。

下面就以上三点,提出对排序算法的整体结论:

1. 当待排序数n较大,排序码分布较随机时,且对稳定性不做要求(很那掌握,一般情况下,如果数据范围小,就是在考察稳定性)。

2. 当n较大,而且要求稳定时,而且内存空间允许(注意,202)时,采取归并排序,但是代码复杂度较高。‘

3. 当排序数n较小,且要求稳定时,选择直接插入排序为宜。

根据经验,我们最常用的是快速排序,通常只是作为解决问题的一个步骤,不会有太

高的要求。堆往往是用作数据结构。如果数据范围很小,笔者建议以稳定性为重。

以上只是一些看法,理论性很强,下面会写一些具体应用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: