无聊送分贴。。。找错
好久没发帖了。。。
谁先到先得。。。
#include <iostream>
#include <iomanip>
using namespace std;
int binary(int *arr, int size, int number)
{
if(arr[size/2] < number)
return binary(&arr[size/2], size - size/2, number);
else if(arr[size/2]>number)
return binary(arr, size - size/2,number);
else return size/2;
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12};
cout < <binary(arr, sizeof(arr)/sizeof(int), 2);
return 0;
}
#include <iostream>#include <iomanip>using namespace std;int binary(int *arr, int size, int number){ if(arr[size/2] < number) return binary(&arr[size/2], size - size/2+1, number); else if(arr[size/2]>number) return binary(arr, size - size/2+1,number); else return size/2;//最后的这里肯定是1的,因为你的数组长度一直在变的}int main(){ int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12}; cout<<binary(arr, sizeof(arr)/sizeof(int), 11); return 0;}
[解决办法]
建议LZ画图分析一下。。。。
[解决办法]
#include <iostream>using namespace std;int binary(int *arr, int left,int right, int number){ if(arr[(left+right)/2]< number) return binary(arr,(left+right)/2+1,right , number); else if(arr[(left+right)/2]> number) return binary(arr,left,(left+right)/2-1 , number); else return (left+right)/2;}int main(){ int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12}; cout<<binary(arr, 0,sizeof(arr)/sizeof(int)-1, 12); return 0;}
[解决办法]
接分,不给你不是人
[解决办法]
jf jf
[解决办法]
按9楼改吧,否则你要找的元素如果是在两头按照你写的是没办法找到的。
[解决办法]
顶9楼
[解决办法]
接分!!!
[解决办法]
else return size/2; // else return (left+right)/2;
------解决方案--------------------
一种比较丑陋的实现:
#include <iostream>using namespace std;int binary(int *arr, int size, int number){ static int index = 0;//增加一个静态变量用于返回正确的下标 //增加递归结束条件,防止栈溢出 if (size <= 0 || ((size == 1) && arr[0] != number)) return -1; if(arr[size/2] < number) { index += size/2; return binary(&arr[size/2], size - size/2, number); } else if(arr[size/2]>number) return binary(arr, size - size/2, number); else return (size/2 + index); }int main(){ int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12}; cout<<binary(arr, sizeof(arr)/sizeof(arr[0]), 129); system("pause"); return 0;}
[解决办法]
接点分回去,错误都被人先抢了