折半查找已经在上一篇文章中有介绍,这里就不多说,直接奉献程序。程序都已调试过。
//折半查找一般实现方法
#include<stdio.h>
#define MAX_SIZE 101
//惯用法,x < y 返回-1,x=y返回0,x>y返回1
#define COMPARE(x, y) ((x) < (y)? -1:((x) == (y) ? 0: 1))
int binsearch(int list[], int searchNum, int left, int right);
int main(){
int i, j, list[MAX_SIZE], searchNum, n;
printf("Enter input size is n:");
scanf("%d", &n);
srand(time(NULL)); //linux 环境产生随机数需要srand
for(i = 0; i < n; i ++){
list[i] = i *2;
printf("list[%d] = %d\n", i, list[i]);
}
printf("Enter searchNum is:");
scanf("%d", &searchNum);
printf("Search result is %d\n", binsearch(list, searchNum, 0, n));
return 0;
}
int binsearch(int list[], int searchNum, int left, int right){
int middle;
while(left <= right){
middle = (left + right)/ 2;
switch(COMPARE(list[middle], searchNum)){
case -1:
left = middle +1;
break;
case 0:
return middle;
case 1:
right = middle -1;
break;
}
}
return -1;
}