常用排序算法性能分析

来源:互联网 发布:java输出九九乘法表 编辑:程序博客网 时间:2024/05/17 23:23

在平时写代码时比较常用的几种算法,性能表格如下:

排序法

平均时间

最坏

稳定

额外空间

冒泡排序

On^2

On^2

稳定

O1

选择排序

On^2

On^2

不稳定

O1

插入排序

On^2

On^2

稳定

O1

快速排序

Onlogn~ On

On^2

不稳定

Onlogn

堆排序

Onlogn

Onlogn

不稳定

O1

希尔排序

Onlogn

On^2

不稳定

O1

归并排序

Onlogn

Onlogn

稳定

On

我们可以把算法大致分为几类:

交换排序类:冒泡排序,快速排序;

插入排序类:插入排序,希尔排序;

选择排序类:选择排序,堆排序;

归并排序类:归并排序;

在进行开发时可以按照实际情况选择合适的算法进行使用。

注:

    在学习过程中,发现有的书说简单选择排序是稳定的,有的书说是不稳定的。首先排序稳定的定义是:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

        通过这个定义,我们可以尝试对一个小序列如:2,5,5,3进行选择排序。

        排序前:2,5,5*,3

        排序后:2,3,5*,5

        从上面的排序过程中,我们可以看到排序后元素5的相对次序发生了变化。在一般情况下简单选择排序是稳定的,但如果有多个相同元素,就会产生不稳定的情况,如上面所列举的例子,所以我认为简单选择排序是一般稳定,特殊情况不稳定。

0 0
原创粉丝点击