数据结构与算法
Heriam
https://jiang-hao.com/pages/aboutme
展开
-
数据结构与算法——计数排序
原文链接:https://jiang-hao.com/articles/2020/algorithms-algorithms-count-sort.html文章目录算法介绍算法实现算法优化算法介绍计数排序(Counting sort)是一种稳定的线性时间排序算法。该算法于1954年由 Harold H. Seward 提出。计数排序使用一个额外的数组C ,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。当输入的元素是 n 个 0 到 k 之间的整数.原创 2020-12-19 20:48:30 · 331 阅读 · 1 评论 -
数据结构与算法——堆排序
原文链接:https://jiang-hao.com/articles/2020/algorithms-algorithms-heap-sort.html文章目录算法介绍算法步骤算法实现算法介绍堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升.原创 2020-12-19 20:47:31 · 294 阅读 · 1 评论 -
数据结构与算法——快速排序
原文链接:https://jiang-hao.com/articles/2020/algorithms-algorithms-quick-sort.html文章目录1. 算法步骤2. 动图演示3. 算法实现实现一实现二4. 快速排序的特点及性能快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loo.原创 2020-12-19 20:46:24 · 267 阅读 · 1 评论 -
数据结构与算法——归并排序: 数组&链表&递归&非递归解法全家桶
原文链接:https://jiang-hao.com/articles/2020/algorithms-algorithms-merge-sort.html文章目录算法介绍算法步骤代码实现数组实现时间复杂度O(NlogN),空间复杂度O(N)递归实现一:每次归并时都创建一个辅助数组递归实现二:仅创建一次一个等长的辅助数组,交替归并非递归实现链表实现时间复杂度O(NlogN),空间复杂度O(1)递归实现非递归实现(从底至顶直接合并)算法复杂度算法介绍归并排序(Merge sort)是建立在归并操作上.原创 2020-12-19 20:44:25 · 401 阅读 · 1 评论 -
数据结构与算法——插入排序(扑克牌排序)
原文链接:https://jiang-hao.com/articles/2020/algorithms-algorithms-insert-sort.html文章目录算法原理排序步骤动图演示代码实现复杂度分析时间复杂度空间复杂度总结算法优化折半插入(二分查找)优化结果算法原理插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中.原创 2020-12-19 20:42:26 · 1406 阅读 · 1 评论 -
数据结构与算法——希尔排序
原文链接:https://jiang-hao.com/articles/2020/algorithms-algorithms-shell-sort.html文章目录算法原理代码实现增量序列及时间复杂度Shell 增量序列Hibbard增量序列Sedgewick增量序列Knuth增量序列空间复杂度算法原理希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率.原创 2020-12-19 20:40:40 · 490 阅读 · 1 评论 -
数据结构与算法——选择排序
原文链接:https://jiang-hao.com/articles/2020/algorithms-algorithms-selection-sort.html文章目录排序思想算法性能时间复杂度稳定性代码实现单向选择双向选择运行结果排序思想首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法我们称之为选择排序。选择排序是一种.原创 2020-12-19 20:38:58 · 529 阅读 · 1 评论 -
数据结构与算法——链表
原文链接:https://jiang-hao.com/articles/2020/algorithms-data-struct-linkedlist.html文章目录定义单向链表循环链表双向链表双向循环链表链表VS数组基于链表实现 LRU 缓存淘汰算法单链表的回文字符串判断如何写好链表代码技巧一:理解指针或引用的含义技巧二:警惕指针丢失和内存泄漏技巧三:利用哨兵简化实现难度技巧四:重点留意边界条件处理技巧五:举例画图,辅助思考技巧六:多写多练,没有捷径定义相比数组,链表是一种稍微复杂一点的数据结构.转载 2020-12-19 20:35:51 · 355 阅读 · 1 评论 -
数据结构与算法——冒泡排序及其各种优化变形详解
版权声明:本文为Heriam博主原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://jiang-hao.com/articles/2020/algorithms-algorithms-bubble-sort.html文章目录定义算法原理算法实现助记码算法优化优化1:一轮遍历未发生交换可提前结束优化2:记录上一轮最后一次交换的位置优化3:鸡尾酒排序(双向冒泡排序)优化4:一轮遍历未发生交换可提前结束的双向冒泡排序优化5:记录上一轮最后一次交换的位.原创 2020-10-10 22:01:05 · 515 阅读 · 0 评论 -
数据结构与算法——数组
原文链接:https://jiang-hao.com/articles/2020/algorithms-data-struct-array.html文章目录定义随机访问低效的“插入”和“删除”插入操作删除操作警惕数组的访问越界问题容器能否完全替代数组?为什么数组要从 0 开始编号,而不是从 1 开始?内容小结定义数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。这个定义里有几个关键词,理解了这几个关键词,我想你就能彻底掌握数组的概念了。首先是线性表(.转载 2020-12-19 00:36:34 · 277 阅读 · 1 评论 -
数据结构与算法——复杂度分析
原文链接:https://jiang-hao.com/articles/2020/algorithms-algorithms-bubble-sort.html文章目录概述时间复杂度分析大 O 复杂度表示法时间复杂度分析几种常见时间复杂度实例分析最好、最坏情况时间复杂度平均情况时间复杂度均摊时间复杂度空间复杂度分析内容小结概述从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。比如,因为数组具.转载 2020-12-19 00:29:53 · 855 阅读 · 2 评论