数据结构与算法分析 C++
ShenYorke
这个作者很懒,什么都没留下…
展开
-
二分查找变形问题
4种常见的二分查找变形问题变体一:查找第一个值等于给定值的元素变体二:查找最后一个值等于给定值的元素变体三:查找第一个大于等于给定值的元素变体四:查找最后一个小于等于给定值的元素测试代码变体一:查找第一个值等于给定值的元素template<typename T>int BinSearch_1(T a[], int n, T val) // 变体一:查找第一个值等于给定值的元素{ int mid(0), low(0), high(n-1); while (low &原创 2021-08-11 15:18:17 · 162 阅读 · 0 评论 -
快速排序(递归方法)
快速排序(递归方法)基本思想先找到一个合适的数,作为支点pivot并放在段末尾,然后两个指针在数据段的首位,开始遍历判断,目的是为了让下标为L的位置,左侧均小于支点值(支点本身不小于支点),右侧则大于支点值(不包括数据段末尾的支点),然后L和支点位置互换。代码如下,注解很详细:// 找到中位数 数组长度要大于3,要求三个数不相同template<class T>int findMed(T a[], int &i ,int &j){ if((j - i )原创 2021-08-08 20:11:50 · 649 阅读 · 0 评论 -
归并排序
归并排序非递归版本非递归版本归并的核心思想可以看这位大佬写的,有动图,方便理解:图解mergerSort// 非递归版本template <class T>void merge(T d[], T tmp[], int startOfFirst, int endOfFirst,int endOfSecond){ // 把 c 中相邻的两个数据段归并到d中 int first = startOfFirst; // 第一个数据段的索引 int s原创 2021-08-06 20:37:32 · 100 阅读 · 0 评论