day09.1 C语言初阶—— 在一个有序数组中查找具体的某个数字n。 编写int binsearch(int x, int v[], int n);

day09.1

谁能横刀立马,唯我飞牛大将军!

今天做点题778:

1.在一个有序数组中查找具体的某个数字n。 编写int binsearch(int x, int v[], int n); 功能:在v[0]
<= v[1] <= v[2] <= …. <= v[n - 1]的数组中查找x

普通做法:数组的遍历

/*在一个有序数组中查找具体的某个数字n。 编写int binsearch(int x, int v[], int n); 功能:在v[0]
<= v[1] <= v[2] <= …. <= v[n - 1]的数组中查找x*/

#include<stdio.h>
#include<windows.h>

int  BinSearch(int arr[], int num, int x)//传参的时候,
数组下标是被忽略的!
{
	int i = 0; //i是数组下标
	for (; i < num; i++){

		if (arr[i] == x)
		{
			return i;

		}
	}
		return -1;
	
}

int main()
{
	int a = 0;
	int num = 0;
	int arr[] = {11,12,13,14,15,16,17,18,19,20};
	num = sizeof(arr) / sizeof(arr[0]);
	scanf_s("%d",&a);
	int index = BinSearch(arr, num, a);
	printf("%d\n",index);
	system("pause");
	return 0;
}

二分查找法

由题意得是有序数组

/*在一个有序数组中查找具体的某个数字n。 编写int binsearch(int x, int v[], int n); 功能:在v[0]
<= v[1] <= v[2] <= …. <= v[n - 1]的数组中查找x*/

#include<stdio.h>
#include<windows.h>

int  BinSearch(int arr[], int num, int x)
{
	int start = 0;
	int end = num - 1;
	while (start <= end)
	{
		int mid = (start + end) / 2;
		if (x < arr[mid])
		{
			end = mid - 1;
			//左半部分
		}
		else if (x > arr[mid])
		{
			start = mid + 1;
			//右半部分
		}
		else
		{
			return mid;
		}
	}
	return -1;
	
}

int main()
{
	int a = 0;
	int num = 0;
	int arr[] = {11,12,13,14,15,16,17,18,19,20};
	num = sizeof(arr) / sizeof(arr[0]);
	scanf_s("%d",&a);
	int index = BinSearch(arr, num, a);
	printf("%d\n",index);



	system("pause");
	return 0;
}
发布了10 篇原创文章 · 获赞 11 · 访问量 1835

猜你喜欢

转载自blog.csdn.net/Flying_Cow_Z/article/details/105452899