分治法
来源:互联网 发布:手机借款软件 编辑:程序博客网 时间:2024/06/11 11:41
问题描述:假定一个已经排好顺序的一维数组,运用二分搜索算法,使得当前输入元素x不在数组中是,返回小于x的最大元素位置i和大于x的最小元素的位置j,当搜索元素在数组中,i
和j相同,均为x在数组中的位置.
算法分析:
分治法算法:
void fenzhi(int a[10],int x)
{
int i,flag_up,flag_down;
int max_left,max_right,found_left,found_right;
for(i=0;i<10;i++)
{
if(a[i]<x)
max_left=i;
else if(a[i]==x)
found_left=i;
else flag_down=1;
}
for(i=10;i>0;i--){
if(a[i]>x)
max_right=i;
else if(a[i]==x)
found_right=i;
else flag_up=1;
}
if(flag_down==1){
printf("Under Out of Index");
}
else if(flag_up==1){
printf("Up Out of Index");
}
else{
if(found_right!=found_left){
printf("%d %d\n",max_left,max_right);
}
else
printf("found and the place is %d\n",found_left);
}
}
算法分析:定义一对变量:max_left和max_right分别为当x不在数组中时的左右位置;
定义一对变量:found_left和found_right分别为当x在数组中时的左右位置;
定义一对变量:flag_down和flag_up分别为当x超出我所设定的数组边界时,判断此时是为上边界越线还是下边界越线。
在代码中,首先写一个递增循环,找出三种情况:1.x未超界且x不在数组中时,x的最近左边位置max_left;2.x未超界且x在数组中时,x的左边位置found_left;3.x超界时,为下边界;
其次写一个递减循环,找出三种情况:1.x未超界且x不在数组中时,x的最近右边位置max_right;2.x未超界且x在数组中时,x的右边位置found_right;3.x超界时,为上边界;
最后就是一系列判断的代码。
完整代码:
#include<stdio.h>
void fenzhi(int a[10],int x){
int i,flag_up,flag_down;
int max_left,max_right,found_left,found_right;
for(i=0;i<10;i++)
{
if(a[i]<x)
max_left=i;
else if(a[i]==x)
found_left=i;
else flag_down=1;
}
for(i=10;i>0;i--){
if(a[i]>x)
max_right=i;
else if(a[i]==x)
found_right=i;
else flag_up=1;
}
if(flag_down==1){
printf("Under Out of Index");
}
else if(flag_up==1){
printf("Up Out of Index");
}
else{
if(found_right!=found_left){
printf("%d %d\n",max_left,max_right);
}
else
printf("found and the place is %d\n",found_left);
}
}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,10,11};
int x;
printf("Input the number:");
scanf("%d",&x);
fenzhi(a,x);
return 0;
}
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- 分治法
- MySQL的limit用法和分页查询的性能分析及优化(转)
- windows 少数线程并发 监听多个目录
- 秒杀多线程第四篇 一个经典的多线程同步问题
- linux 用户/用户组添加修改删除(ubuntu/centos)
- 经典Mysql-cluster数据库集群搭建(linux)
- 分治法
- Jmeter分布式部署
- Mysql读写分离集群中间件—Atlas完美配置,So easy!5分钟搞定!Oracle数据库SQL优化方法案例
- linux用公钥免密码登录
- Python基础 常用内建模块
- 为什么学习Python以及Python的安装
- java中的length属性,length()方法,size()方法
- 微信小程序服务器端部署好后报错,后台无法进入登录界面
- ssm整合shiro后,遇到ajax请求的处理