Ⅰ 数据结构-八大排序算法的时间复杂度 稳定性
1:直接插入排序:
最好:待排序已经有序, 从前往后走都不用往里面 插入。 时间复杂度为o(n)
最坏:待排序列是逆序,每一次都要移位插入。 时间复杂度o(n^2)
是稳定排序
2:希尔排序:
最好:缩小增量的插入排序,待排序已经有序。时间复杂度o(n)
一般:平均时间复杂度o(n 1.3),最差也是时间复杂度o(n 1.3)
不稳定排序
3:冒泡排序:
最好:待排序已经有序。时间复杂度o(n)
最坏:待排序是逆序。时间复杂度o(n^2)
稳定排序
4:快速排序:
最好:待排序无序。时间复杂度o(nlogn)
最坏: 待排序已经有序,基准定义在开始。 时间复杂度为o(n^2)
不稳定排序
5:直接选择排序:
无论好坏:o(n^2)
稳定排序
6:堆排序:
无论好坏:时间复杂度o(nlogn)
不稳定排序
7:归并排序:
稳定排序
8:基数排序:
无论好坏:o(d(n+r)) ,r为基数,d为位数.
稳定排序
Ⅱ 数据结构排序算法有哪些常用的
最常用的是快速排序,基数排序,计数排序,归并排序,堆排序,(偶尔还有插入排序)
都有各自的应用,快排就是单纯的快,但是特殊数据下复杂度会退化
基数排序可以配合一些特定的算法,譬如后缀数组的构建
计数排序简单且常用,通常排序值域小但是数据量大的情况
归并直接用来排序并不多,但是可以用来求解一些其他问题,本身的思想也非常重要,有很多拓展的算法(不是排序算法)
堆排序胜在稳定,不论数据如何最坏都是O(nlogn),一般情况比快速排序慢些,但是极端情况下表现十分优秀,常用来配合快速排序,优化其稳定性
插入排序适合极少量数据的排序(几个到十几个),速度要比这些高级算法快一些
Ⅲ 数据结构中哪种排序方式效率最好
简单排序的算法(直接插入,冒泡,简单选择排序)简单且稳定,适合与待排记录较小的情况,当当待排序的关键码序列已经基本有序时,用直接插入排序最快。
就平均时间的性能而言,快速排序最佳,即排序速度最快,所以在随机情况下,快速排序是最佳选择。一般情况下,快速排序效率最好。
既要节省空间,又要有较快的排序速度,堆排序是最佳选择,其不足之处是建堆时需要消耗较多时间。
若希望排序是稳定的,且有较快的排序速度,则可选用2路归并排序,其缺点需要较大的辅助空间分配。
Ⅳ 数据结构有哪些基本算法
一、排序算法 1、有简单排序(包括冒泡排序、插入排序、选择排序) 2、快速排序,很常见的 3、堆排序, 4、归并排序,最稳定的,即没有太差的情况 二、搜索算法 最基础的有二分搜索算法,最常见的搜索算法,前提是序列已经有序 还有深度优先和广度有限搜索;及使用剪枝,A*,hash表等方法对其进行优化。 三、当然,对于基本数据结构,栈,队列,树。都有一些基本的操作 例如,栈的pop,push,队列的取队头,如队;以及这些数据结构的具体实现,使用连续的存储空间(数组),还是使用链表,两种具体存储方法下操作方式的具体实现也不一样。 还有树的操作,如先序遍历,中序遍历,后续遍历。 当然,这些只是一些基本的针对数据结构的算法。 而基本算法的思想应该有:1、回溯2、递归3、贪心4、动态规划5、分治有些数据结构教材没有涉及基础算法,lz可以另外找一些基础算法书看一下。有兴趣的可以上oj做题,呵呵。算法真的要学起来那是挺费劲。
Ⅳ 数据结构有哪些基本算法
数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
可以理解为:程序设计 = 数据结构 + 算法
数据结构算法具有五个基本特征:输入、输出、有穷性、确定性和可行性。
1、输入:一个算法具有零个或者多个输出。以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件。后面一句话翻译过来就是,如果一个算法本身给出了初始条件,那么可以没有输出。比如,打印一句话:NSLog(@"你最牛逼!");
2、输出:算法至少有一个输出。也就是说,算法一定要有输出。输出的形式可以是打印,也可以使返回一个值或者多个值等。也可以是显示某些提示。
3、有穷性:算法的执行步骤是有限的,算法的执行时间也是有限的。
4、确定性:算法的每个步骤都有确定的含义,不会出现二义性。
5、可行性:算法是可用的,也就是能够解决当前问题。
数据结果的基本算法有:
1、图搜索(广度优先、深度优先)深度优先特别重要
2、排序
3、动态规划
4、匹配算法和网络流算法
5、正则表达式和字符串匹配
6、三路划分-快速排序
7、合并排序(更具扩展性,复杂度类似快速排序)
8、DF/BF 搜索 (要知道使用场景)
9、Prim / Kruskal (最小生成树)
10、Dijkstra (最短路径算法)
11、选择算法