Java实现
public static void main(String[] args) {
int arr[] = {1, 3, 5,7,8,12,13,14,16,24,26,28,34,36,78,98,105};
int len = arr.length;
int key = 34;
int ret = sortNum(arr,0,len-1,key);
System.out.println(key+"位置为--"+ret);
}
public static int sortNum(int arr[],int min,int max,int key){
int mid = (min+max)/2;
if(key==arr[mid]){
return mid;
}else if(key>arr[mid]){
return sortNum(arr,mid+1,max,key);
}else if(key <arr[mid]) {
return sortNum(arr,min,mid-1,key);
}else {
return -1;
}
}
c语言实现
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/**
* @brief 二分递归查找 时间复杂度为log2n
*
* @param p
* @param min
* @param max
* @param key
* @return int
*/
int fun(int *p,int min,int max ,int key){
int mid = (max+min)/2;
if(key ==*(p+mid)){
return mid;
}else if (key >*(p+mid))
{
fun(p,mid+1,max,key);
}else if (key <*(p+mid))
{
/* code */
fun(p,min,mid-1,key);
}else{
return -1;
}
// return key;
}
int main(int argc, char const *argv[])
{
int arr[] = {1, 3, 5,7,8,12,13,14,16,24,26,28,34,36,78,98,105};
int len = sizeof(arr) / sizeof(int); //获取数组长度
int key = 34; //查找的值
int ret = fun(arr,0,len -1,key); //传参数,数组arr,数组最左边min = 0,最右边max = len(数组最右边)
printf("%d的下标是:%d\n",key,ret);
return 0;
}
查找二分算法
最新推荐文章于 2024-08-14 11:57:07 发布