算法3 ----二分法查找

查找有序数组中的元素,如果无序,先用排序算法排好序

非递归
#include<stdio.h>
#include<stdlib.h>
#define N 10
void main()
{
  int a[N];
  for (int i = 0; i < N; i++)
     {
       a[i] = i * 2;
       printf("%d ", a[i]);  //随意构造一列数组
     }
 printf("\n------------------------\n");
 int shang = 0;
 int xia = N - 1;
 int num = 2;   //要查找的数字
 while (shang <= xia)
 {
    int zhong = (shang + xia) / 2;
    if (a[shang] == num || a[xia] == num || a[zhong] == num) //修改过,万一mun不是刚好在zhong的位置上
      {
	 printf("\n找到了\n");
	 getchar();    //防止窗口一闪而过
	 return;
      }
    else if (a[zhong] < num)
      {
         shang = zhong + 1;
      }
    else
      {
         xia = zhong - 1;
      }
 }
 printf("没找到\n");
 getchar();
 system("pause");
}
递归
int binary_search(int a[],int shang,int xia,int num)
{
   int middle = (shang + xia) / 2;
   int flag = 0;
   if (shang <= xia)
     {
      if (a[middle] == num || a[shang] == num || a[xia] == num)
        {
          flag = 1;
          return flag;
        }
      else if (a[middle] > num)
        {
          binary_search(a, shang, middle - 1, num);
        }
      else  //if (a[middle] < num)
        {
          binary_search(a, middle + 1, xia, num);
        }
     }
   return flag;
}
void main()
{
   int a[N];
   int num = 5;
   for (int i = 0; i < N; i++)
     {
       a[i] = i * 2;
       printf("%d ", a[i]);  //0 2 4 6 8 10 12
     }
 printf("\n请输入你要查找的数字:\n");
 scanf_s("%d", &num);
 int flag = binary_search(a, 0, N - 1,num);  //新建一个变量接收返回值
 if (flag == 0)
   {
      printf("没找到\n");
   }
 else
   {
      printf("找到了\n");
   }
 system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值