数据结构——二分法(1)

时间:2025-03-25 20:19:48
/** * func : 二分法查找 * time : 2020.11.07 * mane : pitt * * 设一有序的数组中有11个数据元素 * 它们的值依次为{3,8,15,21,35,54,63,79,82,92,97} * 用二分查找在该数组中查找值为82和87的元素的过程 * 82在数组中,87不在数组中 */ #include<> #define N 11 void dichotomy(int* ,int ,int); int main(void) { int arr[N]={3,8,15,21,35,54,63,79,82,92,97}; //被查找的数组 int left,right,middle; //定义左右中 int num; //被查找的数 left = 0; right = N-1; printf("please input a num:"); scanf("%d",&num); while (left < right) //当区间大于零时(即左边值小于右边值)循环操作 { //在循环内对于中间值赋值,才能实现每次指向区间的中间位置 middle = (left+right)/2; //如果要查找的数恰好是中间数,可直接退出循环 if (num == arr[middle]) { printf("find it! \t arr[%d]\n",middle); break; } //如果要查找的数比中间数小,那么就缩小范围,left的值不变,right的值等于中间数的前一个 else if (num < arr[middle]) { right = middle-1; } //如果要查找的数比中间数大,那么就缩小范围,right的值不变,left的值等于中间数的后一个 else if (num > arr[middle]) { left = middle+1; } } //如果在区间内没有找到要查找的数,那么区间会小于等于0(即左边的left大于等于右边的right) if (left >= right) { printf("no such num!\n"); } return 0; }