手撕考研408

数据结构和算法(二):递归、排序、通用排序算法

2019-11-21  本文已影响0人  冰风v落叶

从广义上来讲:数据结构就是一组数据的存储结构 , 算法就是操作数据的方法

数据结构是为算法服务的,算法是要作用在特定的数据结构上的。

10个最常用的数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树

10个最常用的算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法

本文总结了20个最常用的数据结构和算法,不管是应付面试还是工作需要,只要集中精力攻克这20个知识点就足够了。

数据结构和算法(一):复杂度、数组、链表、栈、队列的传送门

数据结构和算法(二):递归、排序、通用排序算法的传送门

数据结构和算法(三):二分查找、跳表、散列表、哈希算法的传送门

数据结构和算法(四):二叉树、红黑树、递归树、堆和堆排序、堆的应用的传送门

数据结构和算法(五):图、深度优先搜索和广度优先搜索、字符串匹配算法、Trie树、AC自动机的传送门

数据结构和算法(六):贪心算法、分治算法、回溯算法、动态规划、拓扑排序的传送门

第六章 递归

一、如何理解递归?
刚才这个问题的递推公示:
f(n) = f(n - 1) + 1 ,   其中f(1) = 1  //f(n)表示你想知道自己在哪一排,f(n-1)代表你前边的一排的排数
func f(_ n: NSInteger) -> NSInteger{
    if n == 1 {
        return 1
    }
    return f(n - 1) + 1
}
二、什么情况下使用递归?

满足以下三个条件的问题,就可以使用递归的方法求解

三、如何编写递归代码?

写出递归代码的关键在于:

总结一下:写出递归代码的关键在于找到将大问题分解成小问题的规律,并基于此写出递推公式,找出终止条件,最后将递推公式和终止条件翻译成实际代码。

注意!! : 不要试图用人脑去分解递归的每一个步骤,只需要搞清一层关系并保证后续规律一致即可。

四、写递归代码要注意的地方

第七章 排序基础知识 + 复杂度为O(n*n)的排序算法

一、如何衡量一个排序算法的好坏:
二、有序度、逆序度、满有序度
三、冒泡排序
四、插入排序
五、插入排序为何比冒泡排序更优?

第八章 时间复杂度为O(nlogn)的排序算法

一、归并排序
二、快速排序
三、如何在O(n)时间复杂度内,找出无序数组中的第K大元素

第九章 时间复杂度为O(n)的排序算法

一、线性排序
二、桶排序
三、计数排序
四、基数排序

第十章 如何实现一个通用的、高性能的排序函数?

一、选择合适的排序算法

首先,回顾一下前边讲过的排序算法,如下图所示:

排序算法
二、快排的分区点如何选择
三、以Glibc中的qsort()函数为例,具体分析一下工业级的排序函数
假设k = 1000,c=200时,klogn+c > n^2

knlogn+c = 1000 * 100 * log100 + 200 远大于 10000

n^2 = 100*100 = 10000

上一篇 下一篇

猜你喜欢

热点阅读