![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
哇哈哈水有点甜
这个作者很懒,什么都没留下…
展开
-
排序算法之——归并排序
利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题,然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案“修补”在一起,即分而治之) 优势:对于巨大的数据集,如果要求Top N这种操作,由于不能把数据一次性读进内存,快排无法发挥作用,这时可以采取归并的方法,将大的数据集分成多个小的数据集,然后分...原创 2019-06-04 10:07:15 · 159 阅读 · 0 评论 -
排序算法之——快速排序,以及求数组中第k小的值
假设有一个如下数组,对其进行快速排序 [7,5,11,0,10,5,17,15] 思路:选一个中间值,把数组中比它小的元素放到左边,比它大的元素放到右边,这时形成三个子数组,分别是中间值,比它大的数和比它小的数,然后对前后两个数组进行递归 最好时间复杂度:O(NlogN) 最差时间复杂度:O(N^2) 代码实现(java):采用哨兵的概念,设数组最后一个元素为哨兵 public static vo...原创 2019-06-04 10:12:37 · 881 阅读 · 0 评论 -
排序算法之——桶排序
概念:桶排序是将数组中的元素放到一个一个的桶中,每个桶(bucket)代表一个区间,里面可以承载一个或者多个元素。然后将桶内的元素进行排序,再按顺序遍历桶,输出桶内元素。 时间复杂度:O(n+m+n(logn-logm)) (n代表数组长度,m代表桶数,当n=m时,时间复杂度为O(n)) 空间复杂度:O(m+n) 缺点:如果数组中除了最后一个元素全部都在第一个桶中,那么查询的时间复杂度会退化为O(...原创 2019-06-04 10:18:42 · 257 阅读 · 0 评论 -
排序算法之——选择排序
排序原理:从数组的第一个元素开始,每次遍历数组找出一个最小值放在最左侧,第二次从第二个元素开始,依次类推,直到起始元素为数组的倒数第二个元素时,直接和最后一个元素比较,较小值放左边,完成排序 时间复杂度:O(N^2) 空间复杂度:O(1) 代码实现(java): public static void main(String[] args) { int[] arr = {3,5,1,2,4...原创 2019-06-04 10:20:48 · 275 阅读 · 0 评论 -
排序算法之——冒泡排序
排序原理:(以升序排列为例)相邻两元素进行比较,如过左侧元素大于右侧元素,则进行交换,每完成一次循环就将最大元素排在最后,下一次循环是将其它的数进行类似操作。(即每进行一次循环,待排序的数组就少一个元素) 时间复杂度:O(N^2) 空间复杂度:O(1) 多增加了一个临时元素tmp 代码实现(java) public static void main(String[] args) { int...原创 2019-06-04 10:22:45 · 97 阅读 · 0 评论 -
排序算法之——计数排序
原理:找到数组中数值最大的元素,(如这里的8),创建一个长度为最大元素+1的临时数组,(这里为9),这样就可以把原始数组转换为: 以原始数组元素值为下标,相同元素个数为值的临时数组 如数组 [8,4,2,3,5] 经过转换后形成了 [0,0,1,1,1,1,0,0,1] 的数组,如下图: 但是在一些情况下,这样创建数组是不合适的,如[90,96,92,93,95] ,这就需要创建一个长度为97的...原创 2019-06-04 10:45:44 · 127 阅读 · 0 评论 -
二分查找
前提:二分查找的前提是数组内的元素必须是有序的 思想:找到数组的中间值,和需要查找的值进行对比:如果中间值等于查找值,直接返回中间值下标;如果中间值大于查找值,则递归向左边查找;如果中间值小于查找值,则递归向右边查找,直到找完所有的元素 递归的结束条件——数组的开始下标 > 结束下标 扩展:如果一个数组中有多个查找值,需要返回一个元素值等于查找值的下标的数组,在查到第一个元素等于查找值后,分...原创 2019-06-04 10:48:30 · 171 阅读 · 0 评论