![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
分享算法知识
z y_
这个作者很懒,什么都没留下…
展开
-
二分查找(中):变形问题
二分查找变形问题有很多,本章讲几个经典的,默认数据都是从小到大。 4种常见的二分查找变形问题 查找第一个值等于给定值元素 查找最后一个值等于给定值元素 查找第一个大于等于给定值元素 查找最后一个小于大于给定值元素 变体1. 查找第一个值等于给定值元素 如果数据集中存在重复数据,如何找到第一个值等于给定值的元素 比如这样一个有序数组,arr=[1,2,3,4,5,5,6,7,10,12,13],其中arr[4],arr[5]的值都是5,希望查找第一个等于5的数据,也就是下标为4的元素。 示例: funct原创 2020-09-05 22:56:06 · 131 阅读 · 0 评论 -
二分法(上):原理讲解+简单实现
二分法依赖于有序的顺序表结构(数组),针对的是有序的数据,每次通过跟区间的中间元素比较,将待查找区间缩小为之前的一半,直到数据被找到,或区间缩小为0 二分查找实现 简单demo public function binarySearch($arr, $target) { $low = 0; $high = count($arr) - 1; while ($low <= $high) { $mid = $low + (($high-$low)>>1);原创 2020-09-04 22:33:58 · 753 阅读 · 0 评论 -
快速排序(通俗易懂+例子+优化方案)
快速排序思想 排序数组(下标从l到r),选择l到r之间任意一个数据作为povit(分区点)。 遍历数组,将小于povit到放左边,大于povit到放右边,将povit放中间。处理后,数组l到r的数据分成了3部分,l到mid之间到数据都是小于povit的,povit在中间,后面mid+1到r的数据都是大于povit的。 用递归排序下标l到mid之间到数据和mid+1到r之间到数据,直到区间缩小为1,这数组就有序了。 递归公式: quick_sort(l…r) = quick_sort(l…mid-1) + q原创 2020-08-30 23:20:46 · 926 阅读 · 0 评论 -
归并排序
归并排序核心思想: 如果要排序一个数组,先把数组从中间分成2部,然后对这2部分分别排序,再将排序好的数组进行合并。 归并排序使用的是分治思想,即将一个大问题分解成小的子问题来解决,小的子问题解决了,大问题也就解决了。 这里用递归来实现归并排序 说下写递归代码的技巧:分析出递归公式,找到终止条件,最后将递归公式翻译成代码。 递归公式: merge_sort(l…r) = merge_sort(l…mid) + merge_sort(mid…r) 终止条件:l>=r 解释下这个递归公式: merge_so原创 2020-08-26 17:47:34 · 105 阅读 · 0 评论