C语言折半查找法详细代码(假如有10个已排好序的数)

C语言折半查找法详细代码(假如有10个已排好序的数)

#include<stdio.h>

int seek(int * parr,int low,int high,int num);

void main()

{

int arr[]={1,2,3,4,5,6,7,8,9,10};

int find,num;

printf("input a num to be found.\n");

scanf("%d",&num);

find = seek(arr,0,9,num);

if (find == -1) printf("num=%d not found!\n",num);

else printf("num has been found!\narr[%d] = %d\n",find,arr[find]);

}

int seek (int *parr,int low,int high,int num)

{//parr 为数组名,该数组必须是排好序了(这是二分法的要求),这里按从小到大排序

int mid;

mid = (low+high)/2;

if ((low>=high)&&(parr[mid]!=num))

return -1;

else

{

if (parr[mid]==num)

return mid;

else if (parr[mid]>num)

high = mid+1;//中间数字比要查的数还大,说明可能在中间段以前

else

low = mid-1;//同上,可能在中间段以后

return seek(parr,low,high,num); //递归

}

}

首页