O:本文大致介绍
阅读下面这篇文章你可以有如下收获:
-
对所有的排序算法有个大致的了解。
-
了解你需要学习的排序算法的重点。
-
了解接下来的学习内容。
本篇文章主要是解决排序算法的介绍和我们需要具体的学习之前要了解的一些内容,因此这篇文章没有具体写算法,不过在接下来也会陆陆续续更新,可以第几我的专栏“算法笔记”观看更算法的知识 -
各种排序算法分析:https://blog.csdn.net/weixin_46635575/article/details/120887010
-
001冒泡排序:https://blog.csdn.net/weixin_46635575/article/details/120912718
-
002选择排序:https://blog.csdn.net/weixin_46635575/article/details/120924632
-
003插入排序:https://blog.csdn.net/weixin_46635575/article/details/120925291
-
004希尔排序:https://blog.csdn.net/weixin_46635575/article/details/120959617
-
005快速排序:https://blog.csdn.net/weixin_46635575/article/details/120966937
-
006归并排序:https://blog.csdn.net/weixin_46635575/article/details/120987410
-
007基数排序:https://blog.csdn.net/weixin_46635575/article/details/120992403
-
008堆排序:https://blog.csdn.net/weixin_46635575/article/details/121012144
一、排序算法介绍
1、基本介绍
1、排序算法介绍
排序算法(Sort Algorithm),排序是将一组数据,依据指定的顺序进行排序的过程。
2、排序算法分类
-
内部排序:指将需要处理的数据都加载到内存中进行排序
-
外部排序:数据量过大,无法全部加载到内存中,需要借助外存进行排序。
-
常见的排序有:
- 插入排序:直接插入排序和希尔排序
- 选择排序:简单选择排序和堆排序
- 交换排序:冒泡排序和快速排序
- 归并排序
- 基数排序
2、算法的时间复杂度
度量一个程序执行的两种方法。
1、事后排序的方法
这种方法可行,但是有两个问题,一是相对于设计的算法的运行性能进行评测,需要实际运行该程序,二是所得时间的统计量依赖于计算机的硬件,软件等环境因素,这种方式,需要在同一台计算机的相同状态下运行,才能比较那个算法速度快。
2、事前估算法
通过分析某一个算法的时间复杂度来判断哪个算法更优。
二、时间复杂度具体介绍
1、时间频度
-
时间频度:一个算法话费的时间与算法中语句的执行次数成正比,哪个算法中语句执行的次数多,它花费的时间就多。—>一份算法中的语句执行次数称为语句频度或时间频度,记成T(n)。
-
例子:
(1)时间频度—忽略常数项
(2)时间频度—忽略低次项
(3)时间频度—忽略系数项
2、时间复杂度
-
一般情况下,算法中的基本操作语句的重复次数是问题规模n的某个函数,用T(n)表示,若某个辅助函数f(n)使得当n趋势于无穷大时,T(n)/ f(n)的极限为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)= O(f(n)),称O(f(n))为算法的渐进时间复杂度,简称为时间复杂度。
-
T(n)不同,但时间复杂度可能相同。如:T(n) = n^2 + 7n + 6 与T(n) = 3n^2 + 2n +2它们时间复杂度T(n)不同,但是时间复杂度相同。
-
计算时间复杂度的放法。
- 用常数1代替运行时间中的所有加法常数 如:T(n) = n^2 + 7n + 6 —>T(n) = n^2 + 7n + 1
- 修改后的运行次数函数中,只保留最高阶级 如:T(n) = n^2 + 7n + 1 —> T(n) = 3n^2
- 去除最高级的系数。 T(n) = 3n^2 —>T(n) = O(n^2)
3、常见的时间复杂度
-
常数阶级O(1)
-
对数阶级O(log2n)
-
线性阶级O(n)
-
线性对数阶级O(nlog2n)
-
平方阶级O(n^2)
-
立方阶级O(n^3)
-
k次方阶O(n^k)
-
指数阶级O(2^n)
- 常见的算法时间复杂度由小到大:上面顺序依次下来,随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率也变低。
- 尽量避免指数阶级的算法。
(1)常数阶级O(1)
(2)对数阶级O(log2n)
(3)线性阶级O(n)
(4)线性对数阶O(nlogN)
(5)平方阶级O(n^2)
(6)立方阶级O(n^3)
三、常见算法的平均时间复杂度和最坏时间复杂度
1、平均时间和最坏情况介绍
2、常见算法的最后和平均
从上可以看:基数排序是比基数前面几个是更好的。
四、算法的空间复杂度
1、归并排序大致介绍
因为我们平时开发也是关心的是时间复杂度,现在硬件更新比较快,基本对我们生活不影响,关心的是运行时间的多少,基本不关心的是时间,越快越好。