10.3先修课

   日期:2020-10-03     浏览:95    评论:0    
核心提示:文章目录一、二分查找二、排序三、综合应用一、二分查找1.问题引入有n个有序数ai,有q个询问,每次输入一个x,求小于等于x的最大值例如:1 3 4 6 7 9 , x=5,x=6下标:1 2 3 4 5 6我们令str=1,end=6,求mid=(l+r)/2这样区间就变成了三部分:[str,mid-1],mid,[mid+1,end]代码实现:int main(){ int n,q,x; cin>>n>>q; for(int i=1;i<=n;.

文章目录

  • 一、二分查找(二分答案)
  • 二、排序
  • 三、递归

一、二分查找(二分答案)

1.问题引入

有n个升序正整数ai,有q个询问,每次输入一个x,
求小于等于x的最大值,(数据保证有数比x小)
例如:1 3 4 6 7 9 , x=5,x=6
下标:1 2 3 4 5 6

有个游戏叫猜数字,有一个数a,属于【1,1000】
每次猜一个数x,会告诉你x跟a比,大了还是小了

我们令str=1,end=n,求mid=(str+end)/2
这样区间就变成了三部分:[str,mid-1],mid,[mid+1,end]

代码实现:

int main(){ 
	int n,q,x;
	cin>>n>>q;
	for(int i=1;i<=n;i++)cin>>a[i];
	
	for(int i=1;i<=q;i++){ 
		cin>>x;
		
		int str=1,end=n,mid,ans=0;
		while(str<=end){ 
			mid=(str+end)/2;
			if(a[mid]<x){ 
				str=mid+1;
				ans=mid;
			}
			else if(a[mid]>x)end=mid-1;
			else { 
				ans=mid;
				break;
			}
		}
		cout<<a[ans]<<endl;
	} 
	return 0;
}

例题1
例题2
例题3
例题4

二、排序

给定n个数,每个数分别为ai,对a[]数组排个升序,并输出
例:3 2 9 5 7 8 4 1 6 =>1 2 3 4 5 6 7 8 9

1.冒泡排序

让相邻两个数,比较,如果前面一个数较大,就交换
3 2 9 5 7 8 4 1 6
2 3 9 5 7 8 4 1 6
2 3 9 5 7 8 4 1 6
2 3 5 9 7 8 4 1 6
2 3 5 7 9 8 4 1 6
2 3 5 7 8 9 4 1 6
2 3 4 7 8 4 9 1 6
2 3 4 7 8 4 1 9 6
2 3 4 7 8 4 1 6 9

2.sort(快速排序)

3.桶排序

数组有对应的下标,比如a[i]中的i
我们令a[i]的值表示所有数中有多少个i
例如:1 1 4 5 7 3 2 2 2
a[1]=2,a[2]=3,a[3]=1,a[4]=1,a[5]=1,a[6]=0,a[7]=1

4.归并排序

5.堆排序

三、递归

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服