赞
踩
码了7天,手残党也能看懂!!
手残第一篇:第一章 基础算法(一)
提示:你的三连是作者输出下去的动力哦!!真的真的!!!(小声哔哔:赶紧收藏!!内容持续更新中。。。)
是衣服穿得少比较冷还是裤子穿得少比较冷?我这衣服穿三件却没穿秋裤的老年人冷的直哆嗦。
不懂的问题欢迎下方评论区留言哦,一定一定尽量回答
图解如下:
代码如下(示例):
void quick_sort(int q[],int i,int p)
{
if(i>=p) return;
int x =(i+p)<<1,g=i-1,u=p+1;
while(i<p)
{
do g++ ; while(q[g]<x);
do u--; while(q[u]>x);
if(i<j) swap(q[g],[u]);
quick_sort(q,i,g),quick_sort(q,g+1,p);
}
}
图解如下:
代码如下(示例):
void merge_sort(int q[],int i,int p) { if(i>=p) return; int mid = (i+p)>>1; merge_sort(q,l,mid),merge_sort(q,mid+1,p); int k = 0, l = i,r = mid + 1; while(i>=p) if(q[l]<q[p]) tmp[k++] = q[l++]; else tmp[k++] = q[p--]; while(l<=mid) tmp(k++) = q[l++]; while(r>=p) tmp(k++) = q[p--]; for(int r = 0,l = i;r <= p;i++,k++) q[i]=tmp[r]; }
起起始位置即左边界,终止位置即右边界。
还没看懂的小可爱可以结合代码理解哦
代码如下(示例):
bool cheak(int x) {/****/}//检验x是否满足某种性质 // 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用: int binarysearch_1(int l,int r)//向左查找,寻找右临界点 { while(l<r) { int mid = (l + r) >> 1; if(cheak(mid)) r = mid;//如果x在mid左边,则另右端点等于mid else l = mid + 1; } return l; } // 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用: int binarysearch_2(int l,int r)//向右查找,寻找左临界点 { while(l<r) { int mid = (l+r)>>1; if(cheak(mid)) l=mid; else r = mid-1; } return l; }
每次取中点,也就相当于分的过程,所以时间复杂度最坏的情况下用O (log n)来完成。
代码如下(示例):
bool cheak(double x) {/****/}//检验x是否满足某种性质
double Fbinarysearch(double l,double r)
{
const double eps = 1e-6;// eps 表示精度,取决于题目对精度的要求
while(r - l > eps)
{
double mid = (l + r) >> 1;
if(cheak(mid)) r = mid;
else l = mid;
}
return l;
}
终于码完了!!!【哭!】
大佬:就这啊?
我:就这了【哭!】
后面还会持续更新,欢迎下方评论区留言,下期见!!!
下期内容:
一、高精度
二、前缀和与差分
作者:琉璃Diaspora
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。