- 博客(4)
- 收藏
- 关注
原创 3.二分查找
二分查找算法功能输入输出算法步骤关键点案例一:AcWing 789. 数的范围输入输出步骤案例二:AcWing 790. 数的三次方根输入输出步骤 算法功能 查找有序数组中的某个元素的下标 输入输出 输入 输出 最左元素下标:l 目标元素的下标:l 最右元素下标:r 数组:a[] 算法步骤 红色区域的右边界值 找中间值 mid = (l+r+1)/2 int mid = l + r + 1 >> 1;//如果不加上1,那么mid得到的是下取整的数 //那
2022-02-14 10:54:46
443
原创 3.归并排序
算法思想是什么? 从中间断开,然后合并 算法步骤是什么? 1.确定分界点,mid=(1+r)/2 2.递归排序left、right 3.归并-合二为一 算法代码是什么? #include <iostream> using namespace std; const int N = 1e5 + 10; int a[N], tmp[N]; void merge_sort(int q[], int l, int r) { if (l >= r) return;
2022-02-12 21:54:14
456
原创 2.第k个数(快速排序选择)
算法思想是什么? 快速排序,个数是位数的象征,第k个数始终在个数多的那一边。 算法步骤是什么? 1.不管三七二十一先找个目标X分两边,此时X左边都<=X,右边>=X,也就能确定目标X在数列中的真实位置。 2.查看k是否<左边个数,如果小于说明在左侧内,左侧递归排序再找到K就OK,反之在右边。例:第三位要在第七位前面找。 3.最终无限夹击找到K。 算法代码是什么? #include <iostream> using namespace std; const int
2022-02-10 16:59:52
737
原创 1.快速排序(双指针法)
算法思想是什么? 分治 算法步骤是什么? 1.选择数组中的第一个元素arr[startIndex]作为轴(pivot) 2.左指针为left,从最左边开始寻找第一个比pivot大的数 3.右指针为right,从最右面的一个元素开始向左寻找第一个小于等于pivot的数值 4.经过2,3两个步骤后,将会出现以下两种情况 (1):left和right没有相遇,此时进行交换,swap(arr,left,right); (2):left和right相遇,做swap(arr,startIndex
2022-02-10 14:52:08
2335
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人