旋转数组的最小数字
2015-06-09 10:09
288 查看
把一个数组最开始的若干个元素搬到数组的末尾 称之为数组的旋转 输入一个递增排序的数组的一个旋转 输出旋转数组的最小元素
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 该数组最小元素为1
#include <iostream>
using namespace std;
int a[]={3,4,5,1,2,3};
int n=5;
int findbyorder(int *a,int low,int high)
{
int r=a[low];
for(int i=low;i<=high;i++)
if(r>a[i])
r=a[i];
return r;
}
int find(int *a,int low,int high)
{
if (a==NULL) return -1;
int mid=low+(high-low)/2;
if(high-low<=1)
{
return a[high];
}
else
if(a[low]==a[high] && a[low]==a[mid])//数组中元素相同 无法使用二分查找~只能顺序查找
return findbyorder(a,low,high);
if(a[low]<a[mid])//a[mid]>a[low] 说明前半部分是递增 后半部分是递减 返回mid到high之间部分
return find(a,mid,high);// mid+1 X 刚开始以为返回mid+1 就可以了 然后运行时发现结果是错误的 如果返回mid+1 那么mid+1
//有可能是最小值 然后 出现比如1,2,3,这种情况 a[low]<a[high] 返回的是后半部分 实际上应当返回后半部分
else //所以应当返回下标 mid 这样 再次比较的时候 才能正确判断区间
if(a[mid]<a[high])
return find(a,low,mid);
//return -1;
}
int main()
{
cout<<find(a,0,n)<<endl;
return 0;
}
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 该数组最小元素为1
#include <iostream>
using namespace std;
int a[]={3,4,5,1,2,3};
int n=5;
int findbyorder(int *a,int low,int high)
{
int r=a[low];
for(int i=low;i<=high;i++)
if(r>a[i])
r=a[i];
return r;
}
int find(int *a,int low,int high)
{
if (a==NULL) return -1;
int mid=low+(high-low)/2;
if(high-low<=1)
{
return a[high];
}
else
if(a[low]==a[high] && a[low]==a[mid])//数组中元素相同 无法使用二分查找~只能顺序查找
return findbyorder(a,low,high);
if(a[low]<a[mid])//a[mid]>a[low] 说明前半部分是递增 后半部分是递减 返回mid到high之间部分
return find(a,mid,high);// mid+1 X 刚开始以为返回mid+1 就可以了 然后运行时发现结果是错误的 如果返回mid+1 那么mid+1
//有可能是最小值 然后 出现比如1,2,3,这种情况 a[low]<a[high] 返回的是后半部分 实际上应当返回后半部分
else //所以应当返回下标 mid 这样 再次比较的时候 才能正确判断区间
if(a[mid]<a[high])
return find(a,low,mid);
//return -1;
}
int main()
{
cout<<find(a,0,n)<<endl;
return 0;
}
相关文章推荐
- java.sql.SQLException: ORA-00911: 无效字符
- 字符串转码
- Crontab 定时任务 命令详解
- 认识自己——心累的原因
- 5 个免费的受欢迎的 SQLite 管理工具
- Linux下操作问题解决的小集
- Cloneable
- Web Api Post注意事项
- MS CRM 2013 Plugin 注册工具登录后空白
- 关于6月9日凌晨的苹果发布会杂谈
- 线程(Thread)
- shell按照行号过滤文本,添加授权语句
- Linux Watchdog 脚本
- linux程序设计——linux环境(第四章)
- 匹配邮箱格式的正则
- iOS_nil、Nil、NULL、NSNull的区别
- jquery easyui-datagrid 如何清空数据
- CentOS 7.0 安装go 1.3.1
- MongoDB JAVA API高级应用
- 百度云推送点击通知后进入不了想要的页面