C语言二分查找运用指针

Python023

C语言二分查找运用指针,第1张

1.你以为是传一个数组a[]对吧。其实这里将一个指针p指向这个数组a,这时候p和a是一样的。只是用指针形式比较严谨,这里用a[]也没关系,因为两者是一样的。

2。b[14]

=

{0},是把整个数组初始化所有元素都为0,注意只有写成0是这样的,如果写成b[14]={1},那么只有b[0]也就是b的第一个元素是1,其它的是任意的

3。输出地内容是传入数组a中值和key一样的元素的下标,如果找不到就返回0。

为什么?这是二分法查找的核心呀。二分法查找的数组必须是排好序的.

比如

1

3

7

8

9

10

15那么

你要搜一个数3,首先就从中间开始搜,那么

比中间这个数大的就会在右边,小的在左边,这样

每次查找都会让区间缩小一半,这就是二分法查找的核心。具体的你可以去搜一下二分查找。这就不再多言了。

根据需求,用二分法查找指定数组中的指定数字,代码如下:

#include <stdio.h>

// 在长度为len的数组a中寻找n,找到就返回数组下标,没找到就返回-1

int search(int a[], int len, int n)

{

int index = -1

int left = 0, right = len, mid = (left + right) / 2

while (left <= right)

{

if (n == a[mid])

{

index = mid

break

}

elseif (n >a[mid])

{

left = mid + 1

mid = (left + right) / 2

}

else

{

right = mid - 1

mid = (left + right) / 2

}

}

return index

}

int main()

{

int array[] = {5, 8, 13, 17, 23, 25, 29, 50, 53}// 数组

int length = 9// 数组长度

int aim = 17// 查找目标

// 输出查找结果, Search 17 in array[]: 3

printf("Search %d in array[]: %d\n", aim, search(array, length, aim))

return0

}

举个例子:

//二分查找法//

#

include

void

main()

{

int

a[16],i,num,flag=0,top,bottom,mid

//定义一个一维数组a[16]用来存放供查找用的数据,但只用a[1]——a[15]//

//num用来放要查找的数据,flag是表示是否找到的开关变量,top表示查找的起始位置,bottom表示查找的终止位置,mid表示top与bottom的中间位置//

char

goon

//变量goon为'y'或'Y'时表示继续下一轮查找,否则终止程序//

printf("请输入第1个数字:\n")

scanf("

%d",&a[1])

//依次输入第二到第十五个数,并要求输入的数递减//

for(i=2i<=15i++)

{

printf("请输入第%d个数字:\n",i)

scanf("

%d",&a[i])

if(a[i]>=a[i-1])

{

printf("请再次输入,它应该比上一个数小:\n")

scanf("

%d",&a[i])

}

}

//输出刚才输入的数//

printf("你刚才输入的数是:\n")

for(i=1i<=15i++)

printf("

%d",a[i])

printf("\n")

//查找循环开始//

do

{

printf("现在请输入你要查找的数:\n")//输入想要查找的数//

scanf("

%d",&num)

top=15

bottom=1

mid=15/2+1

if(num>a[1]

||

num

0)//如果在规定的范围内,开始二分法查找//

{

if(num==a[mid])//找到所需数据,退出本层循环//

{

printf("你所要查找的数字是第%d个。\n",mid)

flag=1

}

else

if(num>a[mid])//如果要查找的数据比a[mid]大,在前半数组查找//

{

top=mid+1

mid=(top+bottom)/2

}

else

//如果要查找的数据比a[mid]小,在后半数组查找//

{

bottom=mid-1

mid=(top+bottom)/2

}

}

if(flag==0)//如果未找到数据,输出找不到的信息//

printf("无法找到你要找的数字!\n")

printf("是否继续查找?(Y/N):\n")//询问是否开始下一轮查找//

scanf("

%c",&goon)

}while(goon=='y'

||

goon=='Y')

}