算法学习(五)----基本排序算法总结

来源:互联网 发布:平板电脑mac地址查询 编辑:程序博客网 时间:2024/06/05 09:22

前几天学习几个基本的排序算法,下面来总结一下

算法分类

这里写图片描述

在维基百科上有排序算法的一张图,红线是我之前总结学习的。

从我们学习的排序算法中可以分为两类:简单排序有冒泡、选择、插入排序;改进算法有希尔、堆排序、归并排序和快速排序。
快速排序是冒泡的升级版,属于交换排序;希尔排序是直接插入排序的升级,属于插入排序类;堆排序相当于简单选择排序的升级,属于选择排序类。

算法动态图解

我自己做了几张这几种排序算法的动态图,以加深理解。原始图是从http://zh.visualgo.net 上截取的,我做成了动态的。
1.冒泡排序
这里写图片描述

2.简单选择排序
这里写图片描述

3.直接插入排序
这里写图片描述

4.归并排序
这里写图片描述

5.堆排序
这里写图片描述

6.快速排序
这里写图片描述

稳定性

算法稳定性是指相等键值的纪录维持相对次序。比如在序列中1、2号位置的元素具有相等的值,在排序前,1在2的前面,在排序后,1是否还在2的前面?尽管这是2个相等值的元素。稳定是指1、2的相对顺序不会发生变化,否则就是不稳定的算法。
从前面几个算法可以知道,稳定的排序算法有:冒泡、选择、插入、归并排序,而希尔、堆排序和快速排序都是不稳定的算法。

算法复杂度比较

冒泡排序(bubble sort)— O(n2)
插入排序(insertion sort)—O(n2)
归并排序(merge sort)—O(n log n);需要O(n)额外空间
选择排序(selection sort)—O(n2)
希尔排序(shell sort)—O(n log2 n)如果使用最佳的现在版本
堆排序(heap sort)—O(n log n)
快速排序(quick sort)—O(n log n)期望时间,O(n2)最坏情况;对于大的、随机数列表一般相信是已知最快的排序

1 0