20151007
来源:互联网 发布:男人月薪4500 知乎 编辑:程序博客网 时间:2024/04/19 08:06
HZ集训日 day2 距CCFNOIP2015仅30d
考试题。。。。今天LHB考了几道比较扯的,就考了20分==QAQ,所以内心很纠结。。。
被Stdafx.h某某犇 YMX LGL 几个大神虐了。。
今天自己学习二分查找
于是窜进了STL里把代码搞了出来
自己和网上的对比和润色了一下
1.快速排序 nlogn
类似于二分查找吧 目测是除插入排序以外的c++最牛排序
但插排利用数组下标只能适用于小数据和非负整数
所以这个就很牛了
快排大家都直接调STL就行了 但是追求速度的oier还是需要掌握的
毕竟STL比手打慢
不说了 上代码
/*algorithm : quick sort[STL]*/inline void qsort(int l,int r){//从小到大排序int i,j,p,mid;i=l,j=r;mid=a[(l+r)>>1];do{while(a[i]<mid) i++;// 如果从大到小排序while(a[j]>mid) j--;//就把这两行的大于小于对调 if(i<=j){a[i]=p,a[i]=a[j],a[j]=p;i++,j--;}}while(i<=j);if(l<j) qsort(l,j);if(i<r) qsort(i,r);}
2. lowerbound 二分查找
STL里快速查找有序序列的方法
返回第一个大于等于key的位置
//lower_bound查询第一个大于等于key的数 int lower_bound(int *a, int size, int key)//size是数组的大小 { int first=0,last=size-1; int middle,pos=0; //需要用pos记录第一个大于等于key的元素位置 while(first<last){ middle=(first+last)>>1; if(a[middle]<key){ //若中位数的值小于key的值,我们要在右边子序列中查找,这时候pos可能是右边子序列的第一个 first=middle+1; pos=first; } else{ last=middle; //若中位数的值大于等于key,我们要在左边子序列查找,但有可能middle处就是最终位置,所以我们不移动last, pos=last; //而是让first不断逼近last。 } } return pos;}
3. upperbound二分查找
STL里快速查找有序序列的方法
返回最后一个大于等于key的位置
前提!!序列必须有序!否则会出错!
//upper_bound 查询最后一个大于等于key的数int upper_bound(int *array, int size, int key){ int first=0,last=size-1; int middle,pos=0; while(first<last){ middle=(first+last)>>1; if(array[middle]>key){ //当中位数大于key时,last不动,让first不断逼近last last=middle; pos=last; } else{ first=middle+1; //当中位数小于等于key时,将first递增,并记录新的位置 pos=first; } } return pos;}
0 0
- 20151007
- 20151007
- 日经春秋 20151007
- 【NOIP模拟】 20151007模拟
- 每日三个笑话-20151007
- CVGTalk-Tom-20151007
- 20151007kaggle Titanic心得.md
- 20151007的NOIP模拟赛
- 天声人語 20151007 2日続きのノーベル賞
- MySQL学习笔记20151007数据类型主键外键多对多设计思想
- [每日一答] [20151007] RStudio中,出现中文乱码问题的解决方案
- 纠正对Fragment Transaction BackStack的误解
- 又开了一个C语言最强最全班
- 第六周--项目四--数制转换
- C# 提示框MessageBox
- swift开发笔记10 - 通过drawRect自定义控件外观
- 20151007
- 数据库概述
- 栈和堆的区别
- CImg 图像库 存储结构
- mysql用户创建以及权限刷新
- java中ArrayList 、LinkList区别
- linux无法执行ifconfig命令
- HDU 1160 FatMouse's Speed(DP)
- iGrimaceVX3.0.0基本使用教程