二分查找,分治法

前言:

     分治法-分而治之,就是把一个大问题分成若干个子问题逐一解决这些子问题,子问题的解合起来就是这个大问题的解

  二分查找就是从一个排好的序列寻找目标数,若这个数存在则返回这个数的下标,若 不存在则返回-1。

算法描述:

   举例一个排好序的序列{0,1,2,3,4,5,6}要从中查找4这个目标值。

left指向起始位置第一个数,right指向终点位置的数

    先对半砍,找出中间位置mid的值与目标值targer比较。

   如果中间值是目标值,则返回中间值的位置,

  中间值>目标值,说明目标值在左半部分。右指向左移,right=mid-1;

  中间值<目标值,说明目标值在右半部分。左指向右移,left=mid+1;

二分查找,分治法_第1张图片

代码详细:

#include
#include
using namespace std;
int arr[] = { 0,1,2,3,4,5,6 };
//二分查找
int find(int* arr, int left, int right, int tager)
{
	while (left <= right)//寻找到最后一个元素
	{
		int mid = (right + left) / 2;
		if (arr[mid] == tager)
		{
			return mid;
		}
		if (tager > arr[mid])//左移
		{
			left = mid + 1;
		}
		if (tager < arr[mid])//右移
		{
			right = mid - 1;
		}
	}
	return -1;
}
int main()
{
	cout <<"目标值下标为:"<< find(arr, 0, 6, 4);
	return 0;
}

二分查找,分治法_第2张图片

你可能感兴趣的:(#,算法-分治法,算法分析与设计,算法,数据结构,c++)