这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
什么是数据结构?什么是算法?
从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。
数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。
数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法、孤立存在的数据结构就 是没用的。
为什么要学习数据结构与算法?
简而言之,学习数据结构能让我们更好的理清计算机中程序运行的逻辑,能看懂大神的代码;而学习算法则可以让我们拥有多种实现需求的方法,且实现起来更加简洁高效。
常用及基础数据结构与算法
数据结构
数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树
算法
递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法
go中常用的2种排序算法
- 插入排序
插入排序是指将原来的数组看成无序数组,然后创建一个数组当成有序数组。每次取出无序数组中的第一个元素与有序数组中的元素进行比较并插入到一个合适的位置。
插入排序的时间复杂度非常两极化,平均/最差的时间复杂度是O(n^2),而最好的情况则只有O(n)。
- 快速排序
快速排序是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。
快速排序的算法思想:首先任意选出一个数组中的元素当作基准。以此基准将数组分为大于基准的元素和小于基准的元素并分别排序在基准数的前后。然后前后分别再次进行快速排序直至对所有数都已实行过快速排序。
相比于插入排序,快速排序的最差时间复杂度与之一样,平均时间复杂度则只有O(n*logn)。