int InsertionSort(int a[],int value,int low,int high,int times){
times ++;
int mid = low+(value-a[low])/(a[high]-a[low])*(high-low);
if(a[mid]==value){
printf("内部经过%d次查找,找到该数值%d,位置为%d\n",times,value,mid);
return mid;
}
if(a[mid]<value){
printf("经过%d次查找,未找到\n",times);
return InsertionSort(a,value,mid+1,high,times);
}
if(a[mid]>value){
printf("经过%d次查找,未找到\n",times);
return InsertionSort(a,value,low,mid-1,times);
}
return -1;
}
InsertionSort based on 二分查找,一开始实现时,无法得知内部调用了几次查找得到结果,因为是递归调用,所以如果把次数变量(times)初始化在查找函数中,每次递归都会重新赋值,这显然不是> 我想要的效果,所以变量当成参数,把他定义在主函数里,每次调用自动+1,则实现该功能
比二分查找的优势在与mid值是根据比较差值计算得到的,相比二分的mid值更加接近所要查找的值,在某些极端的单调递增或递减数列中,甚至可以指通过一次就可以得到结果