- 博客(7)
- 收藏
- 关注
原创 手撕快速排序
运用双指针 i 和 j ,分别指向a[n]数组的头部和尾部。首先在a[n]数组中选定一个值 x,先从数组的头部开始遍历,与x进行比较,直到a[i]>=x,i 停止增加;接下来从数组尾部开始向前遍历,与 x 比较,直到a[j]j停止。如下对数组 5 4 8 1 3 6 4 9 8 7 进行第一次排序的过程。接下来对以 j 为分界两部分进行上述操作,即递归。第二行输入n个数(代表数组每个元素的值)第一行输入一个数n(表示数组元素个数)
2023-04-12 22:52:55 74
原创 KMP算法
*如果j=0或者不匹配的话,j向后退*/= p[j + 1]) j = ne[j];/*不匹配或者j=0,j向后退*/if (s[i] == p[j + 1]) j++;/*匹配,j向前一位,i向前一位*/代码中首字母是存在了数组的第二个位置即p[1]和s[1],所以字符比较是在1开始的,即代码中i=1。if (j == n)/*如果最后一位也匹配了,输出首元素下标*//*最后的j就为ne[i]的数值*/
2023-04-06 18:00:51 104 1
原创 滑动窗口(数组模拟队列)
*判断队头在不在滑动窗口里,如果不在,队头向前移一个,此时队头后面的数一定会比队头小*/if (i >= k - 1) printf("%d ", a[q[hh]]);/*if语句条件是保证滑动窗口中有k个元素,此时把队头输出,队头保存的是最小的值*/int a[N], q[N];/* n为数组元素个数,tt为队尾,hh为队头*/
2023-04-06 14:10:05 93 1
原创 实现单调栈(数组模拟栈)
*如果栈不为空并且栈顶的数值要比现在要进来的数值大,那么之后再插入数据一定不会用到这时栈顶元素,所以要退栈删除栈顶元素,降低时间复杂度。/*如果栈不为空,则说明此时的栈顶元素是要小于x的,直接输出栈顶元素/*/*如果栈为空了,则说明栈中所以元素都比x大,即x的前面没有比它更小的值*/a[++tt] = x;//n为数据个数,tt为栈顶下标。
2023-04-06 13:23:17 86 3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人