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;
}