二分搜索
2017-03-20 23:36
141 查看
二分搜索:将一个排好序的数组,不断地分成两半,然后在可能包含我们所要查找的值的那一部分搜索。
要求数组必修是排序好的
假如数组有两个及两个以上的数字,那么二分算法将不能确定该返回那个值。
int find(int num,int a[],int len)//num将要搜索的值 a[]要查找的值 函数的返回的是找到的元素的下标
{
int min = 0, max = len-1;
while (min<=max)
{
int zhong = (min+max)/2;
if (a[zhong]== num)
{
return zhong;
}
else if (a[zhong]<num)
{
min = zhong + 1;
}
else
{
max = zhong -1;
}
}
return len;//没找到 返回数组的长度
}
int find(int num, int a[], int min,int max)//num将要搜索的值 a[]要查找的值 函数的返回的是找到的元素的下标
{
if(min>max)
{
return max;
}
int zhong = (min + max) / 2;
if (a[zhong] == num)
{
return zhong;
}
else if (a[zhong]<num)
{
min = zhong + 1;
find(num,a, min,max);
}
else
{
max = zhong - 1;
find(num, a, min, max);
}
}
要求数组必修是排序好的
假如数组有两个及两个以上的数字,那么二分算法将不能确定该返回那个值。
int find(int num,int a[],int len)//num将要搜索的值 a[]要查找的值 函数的返回的是找到的元素的下标
{
int min = 0, max = len-1;
while (min<=max)
{
int zhong = (min+max)/2;
if (a[zhong]== num)
{
return zhong;
}
else if (a[zhong]<num)
{
min = zhong + 1;
}
else
{
max = zhong -1;
}
}
return len;//没找到 返回数组的长度
}
int find(int num, int a[], int min,int max)//num将要搜索的值 a[]要查找的值 函数的返回的是找到的元素的下标
{
if(min>max)
{
return max;
}
int zhong = (min + max) / 2;
if (a[zhong] == num)
{
return zhong;
}
else if (a[zhong]<num)
{
min = zhong + 1;
find(num,a, min,max);
}
else
{
max = zhong - 1;
find(num, a, min, max);
}
}
相关文章推荐
- 二分搜索
- 超级赛亚ACMer 二分搜索 upper_bound
- Hihocoder #1095 : HIHO Drinking Game (微软苏州校招笔试)( *【二分搜索最优解】)
- POJ---3579(Median,二分搜索)
- CF 551c 二分搜索+思维题
- poj 2976 Dropping tests (二分搜索之最大化平均值之01分数规划)
- Leetcode 34 Search for a Range (二分搜索 lower_bound和upper_bound)
- POJ 1759 - Garland(二分搜索)
- 二分搜索
- leetcode+二分搜索查找,但是有重复数据有点不一样
- 二分搜索
- 搜索 第一题 二分问题
- hdu 2289 cup(二分搜索)
- 最大化平均值(二分搜索)
- 二分搜索——求K的N次方
- 二分搜索的巧妙应用
- HDOJ Can you find it? 2141(二分搜索)
- hdu 2141Can you find it?(二分搜索)
- 1152: 二分搜索 非递归与递归
- [转]编程珠玑第五章二分搜索(折半查找)之java实现