C语言:整形有序数组中查找具体的某个数(二分查找)
有的人会问,在一个整形的有序数组中,来查找具体的某个数,直接用下面代码就可以了,还有要用什么二分查找,说的有理,但是,下面的那种代码效率不高,
正所谓技多不压身,既学到知识,又学到方法,对不对,那咱们好好讲讲-----整形有序数组中查找具体的某个数(二分查找)。
首先呢,我要了解怎么用二分查找:
其次,就要用代码解决啦
#include<stdio.h> #include<string.h> int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int right = sizeof(arr)/sizeof(arr[0]); //这里用arr10个数字除以一个arr的大小 int left = 0; //定义最左边的下标 int k = 3; //找的数 int mid = (left + right) / 2; //中间数 == 找的数 int flag = 1; //采用flag如果找到了flag=1,找不到flag=0 while (left <= right) //利用循环 当left <= right 就继续找 { if (k == arr[mid]) //找到了 { printf("找到了,下标为:%d\n", mid); flag = 1; break; } else { flag = 0; if (k > arr[mid]) //找到的数小了 { left = mid + 1; } else //大了 { right = mid - 1; } } mid = (left + right) / 2; //注意 } if (flag == 0) { printf("找不到\n"); } return 0; } //如果数组很大的话用mid = (left - right) / 2 + left;
不知不觉就到了尾声啦,写的不是很好,不对的地方还请指点指点。