c语言二分法如何实现查找数组元素


本文摘自PHP中文网,作者coldplay.xixi,侵删。

c语言二分法实现查找数组元素的方法:1、递归算法,代码为【if(a[mid] == key) return mid】;2、非递归算法,代码为【while( left < right && a[mid] != key )】。

本教程操作环境:windows7系统、c99版本,DELL G3电脑。

c语言二分法实现查找数组元素的方法:

递归算法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#include<stdio.h>

//二分法实现数组查找

  

//

int recurbinary(int *a, int key, int low, int high)

{

    int mid;

    if(low > high)

        return -1;

    mid = (low + high)/2;

    if(a[mid] == key) return mid;

    else if(a[mid] > key)

         return recurbinary(a,key,low,mid -1);

    else

         return recurbinary(a,key,mid + 1,high);

  

}

非递归算法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

int binary( int *a, int key, int n )

{

    int left = 0, right = n - 1, mid = 0;

    mid = ( left + right ) / 2;

    while( left < right && a[mid] != key )

    {

        if( a[mid] < key ) {

            left = mid + 1;

        } else if( a[mid] > key ) {

            right = mid - 1;

        }

        mid = ( left + right ) / 2;

    }

    if( a[mid] == key )

        return mid;

    return -1;

}

  

int main(void)

{

int a[10] = {2,4,6,8,10,12,14,16,18,20},t,k,f;

scanf("%d",&t);

k = recurbinary(a,t,2,20);

f = binary(a,t,10);  //非递归算法

if(k == -1){

printf("不存在此数\n");

}else{

printf("%-5d是数组第%d个元素\n%-5d数组的第%d个元素",k,k+1,f,f+1);

}

  

return 0;

}

【相关学习推荐:C语言教程视频】

以上就是c语言二分法如何实现查找数组元素的详细内容!

相关阅读 >>

C语言数组怎么定义?

C语言中允许的基本数据类型包括哪些?

C语言long类型是什么意思

学习C语言需要什么软件?

C语言本身没有输入输出语句吗

putchar在C语言中是什么意思

C语言是一种什么的程序设计语言?

C语言conio.h是什么意思

C语言中数据int的取值范围为多少?

C语言可以直接对硬件进行操作吗

更多相关阅读请进入《C语言》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...