数据结构
lllle00
这个作者很懒,什么都没留下…
展开
-
折半查找(数据结构)
文章目录0x01 原理0x02 使用条件0x03 时间复杂度0x04 代码实现0x01 原理 从表的中间记录开始, 如果给定值和中间记录的关键字相等, 则查找成功;如果给定值大于或者小于中间记录的关键字,则在表中大于或小于中间记录的那一半中查找,这样重复操作,直到查找成功,或者在某一步中查找区间为空,则代表查找失败。0x02 使用条件序列为连续存储序列为有序序列0x03 时间复杂度 折半查找的时间复杂度为 O(log n) 。0x04 代码实现//线性表查找 ———— 折半查找原创 2021-07-11 20:48:23 · 438 阅读 · 0 评论 -
Top-k 问题
文章目录0x01 问题介绍0x02 常规思路0x03 BFPRT 算法0x01 问题介绍 给定线性序集中 n 个元素和一个整数 k ,1<k≤n1<k≤n1<k≤n ,要求找出这 n 个元素中第 k 大或者 k 小的元素,简称 TOP-K 问题。0x02 常规思路 可以分为两步:进行快速排序,得到有序序列从有序序列中选取第 k 个缺点:此种方法使用了快速排序,所以快速排序的缺点也都拥有,如最坏情况的发生(排序的序列为有序序列),且本身也只是求第 k 的数,目的不是原创 2021-06-09 13:41:40 · 119 阅读 · 0 评论 -
堆排序(数据结构)
文章目录0x01 原理0x02 时间复杂度0x03 例子0x04 实现思路0x01 原理 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;0x02 时间复杂原创 2021-06-08 09:02:58 · 169 阅读 · 0 评论 -
冒泡排序(数据结构)
文章目录0x01 原理0x02 时间复杂度0x03 例子0x01 原理 冒泡排序它通过两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记录如气泡一般逐渐往上漂浮(左移),或者使关键字大的记录如石块一样逐渐向下坠落(右移)。0x02 时间复杂度 冒泡排序的时间复杂度为 O (n2n^2n2) ,且是一个稳定排序,0x03 例子右移冒泡(图片来源于菜鸟教程)题目:5,6,3,7,9,12,46,8左移冒泡过程:5,6,3,7,9,12,8,455,6,3,7,原创 2021-06-08 09:02:08 · 190 阅读 · 0 评论 -
选择排序(数据结构)
文章目录0x01 原理0x02 时间复杂度0x03 例子0x01 原理 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。0x02 时间复杂度 选择排序的时间复杂度为 O(n2n^2n2) ,是一个不稳定排序。0x03 例子题目:2,1,8,3,4,9,6排序过程:1,2,8,3,4,9,61,2,8,3,4,9,61,2,3,8,4,9,61,2,3,4,8,9,61,2,3,4,6,8,9...原创 2021-06-06 23:20:11 · 55 阅读 · 0 评论 -
希尔排序(数据结构)
文章目录0x01 介绍0x02 原理0x03 时间复杂度0x04 参考0x01 介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。0x02 原理 它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。 间隔由人选取,一般选 gap = len / 2,一轮排序后,间隔选取为 gap = gap / 2 。详细讲解可以查看参考0x03 时间复杂度 希尔排序时间复杂度是 O(n1.3原创 2021-06-06 22:45:46 · 297 阅读 · 0 评论 -
直接插入排序(数据结构)
文章目录0x01 原理0x02 时间复杂度0x01 原理 将序列分为两个部分,有序数列和无序数列,每次将一个待排序的数据元素,插入到前面己经排好序的数列中的适当位置,使数列依然有序,反复如此,直到完成排序。0x02 时间复杂度 时间复杂度为 O(n2n^2n2) ,且插入排序是一个稳定排序。稳定排序:假设数列中存在两个相同的数(如:两个 1 ),经过排序后,这两个 1 的顺序不变,这种排序叫做稳定排序。...原创 2021-06-06 22:35:18 · 112 阅读 · 0 评论