分治法的设计思想是将一个难以直接解决的问题,通过分解,分割成一些相似的规模较小的问题,以便分而治之,逐个击破。
分治法的使用情况:
1、问题具有最优子结构性质
2、问题所分解的各个子问题是相互独立的,即子问题之间不包含公共子问题
注:其他具有最优子结构性质的算法:动态规划算法;贪心算法
该二分搜索使用的前提:数组已经排序
二分搜索的基本思想:将数组分为个数大致相等的两份,取数组a[n/2]与要搜索的数x相比较,若相等,则返回下标;若a[n/2]>x,则继续在数组的左半部分搜素;若a[n/2]<2,则在数组的右半部分搜索x。
#include<stdio.h>
#include<stdlib.h>
int BinarySearch(int a[],int n,int x) {
int left = 0, right = n - 1;
while (right >= left) {
int middle = (right + left) / 2;
if (a[middle] == x)
return middle;
if (a[middle] < x)
left = middle + 1;
else
right = middle - 1;
}
return -1;
}
int main()
{
int a[6] = {1,3,6,8,9,12};
int n = 6;
int x;
printf("输入你要查找的数:");
scanf_s("%d", &x);
if (BinarySearch(a, n, x) != -1)
printf("查找成功,要查找的数的下标为%d\n", BinarySearch(a, n, x));
else
printf("查找失败");
system("pause");
return 0;
}