排序算法的算法思想和使用场景总结1
概述 排序算法是计算机技术中最基本的算法,许多复杂算法都会用到排序
尽管各种排序算法都已被封装成库函数供程序员使用,但了解排序算法的思想和原理,对于编写高质量的软件,显得非常重要
本文介绍了常见的排序算法,从算法思想,复杂度和使用场景等方面做了总结
几个概念 (1)排序稳定:假如两个数相同,对他们进行的排序结果为他们 的 相 对 顺 序 不 变
例 如 A={1,2,1,2,1} 这 里 排 序 之 后 是 A = {1,1,1,2,2} 稳定就是排序后第一个 1 就是排序前的第一个 1,第二个 1 就是排序前第二个 1,第三个 1 就是排序前的第三个 1
同理 2也是一样
不稳定就是他们的顺序与开始顺序不一致
(2)原地排序:指不申请多余的空间进行的排序,就是在原来的排序数据中比较和交换的排序
例如快速排序,堆排序等都是原地排序,合并排序,计数排序等不是原地排序
总体上说,排序算法有两种设计思路,一种是基于比较,另一种不是基于比较
《算法导论》一书给出了这样一个证明:“基于比较的算法的最优时间复杂度是 O(N lg N)”
对于基于比较的算法,有三种设计思路,分别为:插入排序,交换排序和选择排序
非基于比较的排序算法时间复杂度为 O(lg N),之所以复杂度如此低,是因为它们一般对排序数据有特别要求
如计数排序要求数据范围不会太大,基数排序要求数据可以分解成多个属性等
基于比较的排序算法 正如前一节介绍的,基于比较的排序算法有三种设计思路,分别为插入,交换和选择
对于插入排序,主要有直接插入排序,希尔排序;对于交换排序,主要有冒泡排序,快速排序;对于选择排序,主要有简单选择排序,堆排序;其它排序:归并排序
插入排序 (1) 直接插入排序 特点:稳定排序,原地排序,时间复杂度 O(N*N) 思想:将所有待排序