算法原理:
将以排序的数组每次对半分,查找每一份中是否存在要找的数,保留存在待查找数的数组,继续进行下一次操作直至找到结果位置。
代码如下:
#include<stdio.h> int search ( int nums[] , int size , int target) { int left = 0; //初始化左端为0 int right = size - 1; //右端为数组长度减一 while( left <= right ) //每次查找的区间在[left, right]时 //while( left < right ) //每次查找的区间在[left, right)时 { int middle = left + (( right - left ) / 2); //计算中间值 if( nums[middle] < target ){ //若中间值小于待查找值 left = middle + 1; //剔除左边的所有值 } else if( nums[middle] > target ){ //若中间值大于待查找值 right = middle - 1; //剔除右边的所有值 } else if( nums[middle] == target ){ //若中间值为待查找值 return middle ; //返回中间值的序号 } } return -1; //若待查找值不存在返回-1 } int main() { int n ; printf("你要查找的数有多长:"); scanf("%d" , &n); //数组长度 int a[n]; printf("请输入这些数:"); for(int m = 0 ; m < n ; m ++){ scanf("%d" , &a[m]); //给数组赋值 } int t; printf("请输入你要查找的数:"); scanf("%d" , &t); //要查找的数 printf("结果:"); printf("%d" , search(a , n , t )); //输出位置 return 0; }
结果如下: