#include <stdio.h>
#define MAXSIZE 10
typedef struct{
int list[MAXSIZE];
int length;
}List;
int binary_search(List s, int key);
int main(int argc, char **argv)
{
int a[MAXSIZE] = {1, 3, 9, 12, 18, 23, 56, 69, 73, 84};
List s;
int i, k, rst;
// initialize the list s
s.length = MAXSIZE;
for(i=0; i<MAXSIZE; i++){
s.list[i] = a[i];
}
printf("Enter the key number:");
scanf("%d", &k);
rst = binary_search(s, k);
if(0 == rst)
printf("The key is not in the list!\n");
else
printf("The key is int list, position is:%d\n", rst);
return 0;
}
int binary_search(List s, int key)
{
int low, mid, high;
low = 0;
high = s.length - 1;
//mid = (high + low) / 2;
// Get the average of number high and low
mid = (high & low) + ((high ^ low)>>1);
printf("mid=%d\n", s.list[mid]);
if(key < s.list[low] || key > s.list[high])
goto NOT_INLIST;// return 0 directly will faster than goto NOT_INLIST
while(high >= low){
if(s.list[mid] > key){ //turn to the left part
printf("mid=%d\n", s.list[mid]);
high = mid - 1;
// mid = (high + low) / 2;
mid = (high & low) + ((high ^ low)>>1);
}
else if(s.list[mid] < key){// turn to the right part
printf("mid=%d\n", s.list[mid]);
low = mid + 1;
// mid = (high + low) / 2;
mid = (high & low) + ((high ^ low)>>1);
}
else // The key has been searched
return (mid + 1);
}
NOT_INLIST:
return 0; // no such key
}
二分法查找
最新推荐文章于 2024-06-26 16:28:08 发布