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语言和vb哪个简单

C语言break什么意思?

数组指针和指针数组的区别是什么

int占几个字节(C语言)?

C语言允许函数的递归调用吗

C语言中#define的用法

C语言中在main函数中定义的变量是全局变量么

c如何和mysql连接

C语言指针用法有哪些

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



打赏

取消

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

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

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

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

评论

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