说明:二分查找是基于排序数组(序列的),时间复杂度为logN,但是需要对数组进行排序,最快的 快速排序算法的时间复杂度是NlogN;
实现上分为循环和递归
#include <iostream>
#include <string>
using namespace std;
//这里边int *a 也是可以的
int sort21( int a[] ,int n, int num )
{
if(a==NULL|| n==0 )
return -1;
int left = 0, right = n-1;
int midle = 0 ;
while(left<=right)
{
midle = left + ((right-left)>>1);//直接平均可能会溢位
//midle = (left +right)/2;
if(num == a[midle])
return midle ;
else if(a[midle]<num)
left =midle + 1;
else
right =midle - 1;
}
//找不到数字返回-2
return -2;
}
int sort22(int a[] ,int left,int right,int num)
{
if(a==NULL)
return -1;
//找不到或者排序错误时返回
if(a[left] >a[right])
return -2;
//定义一个中间变量 middl
int midle = left + ((right-left)>>1);
//int midle = (left +right)/2;
if(a[midle]<num)
{return sort22(a,midle+1,right,num);}
else if(a[midle]>num)
{return sort22(a,left,midle-1,num);}
else if(a[midle]=num)
{return midle;}
//奇怪递归的错误码不能写在下边
//return -3;
}
int main()
{
int a[] ={ 0,1,2,3,4,5,6,7 ,11};
int n =0 ,ret ,num;
n =sizeof( a )/sizeof(a[0]);
cout << "n="<< n<< endl;
for(int i=0;i<n;i++){
cout << a[i] <<endl;
}
ret =sort21( a ,n ,0);
cout << ret <<endl;
int left=0,right=n-1;
//cin >> num ;
int ss;
ss =sort22(a,left,right,100);
cout << ss <<endl;
return 0;
}
