二分查找

8 篇文章 0 订阅

一 : 二分查找 (递归实现)

1  显示效果:


2  代码

#include "windows.h"
#include "iostream"
using namespace std;

void FindKey(int * a ,int start, int end , int key)
{
	int i = start;
	int j = end;
	int middle = (j+i)/2;

	if (end < start)
	{
		printf("没有找到该数%d\n",key);
		return;
	}
	if (a[middle] == key )
	{
		printf("找到该数%d\n",key);
		return;
	}
	else if (a[middle] > key)
	{
		end = middle-1;//不能写成 end = middle
		FindKey(a, start, end, key);
	
	}
	else if (a[middle] < key)
	{
		start = middle+1;//不能写成 start = middle+1;
		FindKey(a, start, end, key);
	}
	
}

void main()
{
	
	int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,11 };
	
	FindKey(a, 0, sizeof(a) / sizeof(int)-1, 113);
	FindKey(a, 0, sizeof(a) / sizeof(int)-1, 11);
	FindKey(a, 0, sizeof(a) / sizeof(int)-1, 10);
	system("pause");
}

二  二分法查找(非递归)

1 显示效果


2  代码

#include"stdio.h"
void search(int *a , int len , int key)
{
	int low = 0;
	int high = len - 1;
	int mid = (low + high) / 2;
	/*if (key<a[low] || key > a[high])
	{
		printf("未找到该数%d\n",key);
		return;
	}
	if (key == a[low] || key == a[high])
	{
		printf("找到该数%d\n",key);
		return;
	}这些注释掉的判断没有用*/
	while (low<=high)
	{
		if (a[mid] == key)
		{
			printf("找到该数%d\n",key);
			return;
		}
		else if (a[mid] < key)
		{
			low = mid+1;//这里不能写成low = mid
			mid = (low + high) / 2;
		}
		else if (a[mid]>key)
		{
			high = mid-1; 
			mid = (low + high) / 2; 

		}
	}
	printf("未找到该数%d\n", key);
}
void main()
{
	
	int a[10] = {1,2,3,4,5,6,7,8,9,11};
	printf("非递归实现二分法查找\n");
	search(a, sizeof(a) / sizeof(int), 11);
	search(a, sizeof(a) / sizeof(int), 10);
	search(a, sizeof(a) / sizeof(int), 3);
	getchar();
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值