欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(函数与二分法思想)利用函数实现一个整型有序数组的二分查找

程序员文章站 2022-03-01 18:06:20
...

本题要求利用一个函数实现一个整型有序数组的二分查找。

我的思路如下:      (以数组元素从小到大排列输入为例)

(1)首先编写主函数

int main() 
{
	int scan[10];        //定义一个数组,从外界获取数值
	int target;          //定义一个整型变量,从外界获得数值
	int i = 0,j = 0;     //定义循环中的参数
	int length = sizeof(scan) / sizeof(scan[0]);  //计算数组中元素个数   (这里定义为10个,可更改)

	printf("请输入一个元素为10的整型数组:");
	for(i = 0; i < 10; i++) {
		scanf("%d", &scan[i]);
	}

	printf("请输入你想查找的元素:");
	scanf("%d",&target);

	int num = search(scan,target,length);   //调用函数search,用函数寻找目标值
    // 若找到了该数值 返回该数的次序(次序从1开始,用 “下标+1” 的方式表示)
    // 若找不到该数值 返回一个不与数组下标冲突的数值(如-1)    
	if (num != -1) 
		printf("该元素是第%d个元素", num);
	else
		printf("无法找到该元素!");

		return 0;
}

2.编写函数

int search(int a[], int target, int sum) 
{
	int left = 0;            //左下标
	int right = sum - 1;     //右下标
    //左下标的值与右下标的值圈定了一个区间 如:left = 0;right = 3表示 a[0] a[1] a[2] a[3] 在此范围内查找目标值
	while (left <= right) { 
		int mid = (left + right) / 2;    //首先找到该数组的中间元素的下标
		if (a[mid] < target) {           //若该元素小于目标值 说明目标值下标大于mid
			left = mid + 1;
		}
		else if (a[mid] > target) {      //若该元素大于目标值 说明目标值小于mid
			right = mid - 1;
		}
		else {
			return(mid+1);               //若该元素与目标值相等 则返回它的序号 回到主程序中
		}
	}
	return -1;                           //若所有元素均被扫描仍然未找到目标值 则返回-1
}

3.若将主函数置于自定义函数之上,则需编写函数声明。我习惯于将自定义函数置于主函数之前,避免忘记声明而引起错误。

以下为代码整体:

#include<stdio.h>

int search(int a[], int target, int sum) 
{
 int left = 0;            
 int right = sum - 1;    
  
 while (left <= right) { 
  int mid = (left + right) / 2;    
  if (a[mid] < target) {           
   left = mid + 1;
  }
  else if (a[mid] > target) {      
   right = mid - 1;
  }
  else {
   return(mid+1);               
  }
 }
 return -1;                           
}

int main() 
{
 int scan[10];        
 int target;          
 int i = 0,j = 0;     
 int length = sizeof(scan) / sizeof(scan[0]); 

 printf("请输入一个元素为10的整型数组:");
 for(i = 0; i < 10; i++) {
  scanf("%d", &scan[i]);
 }

 printf("请输入你想查找的元素:");
 scanf("%d",&target);

 int num = search(scan,target,length);      
 if (num != -1) 
  printf("该元素是第%d个元素", num);
 else
  printf("无法找到该元素!");

  return 0;
}

新手小白,欢迎指正~

相关标签: C c语言