上次写了几篇排序的博客,今天写一下查找,而二分法是最基本的查找算法,也是非常重要的查找算法,为了便于理解二分法,我将使用一个具体的程序实现二分查找的应用
使用二分法查找数组中的素
待查找的数组:
2 |
4 |
6 |
8 |
10 |
12 |
14 |
16 |
18 |
20 |
实现算法:
定义几个变量num, tou , zhong, wei,
初始化时 tou = 0 wei = 9 zhong = 4 num = 16
其中num是需要查找的数据
第一步:
a[zhong] < num
tou = zhong + 1 = 5
zhong = (tou + wei) / 2 = 7
因为 num == a[zhong]所以找到了,所以16是数组中的第7个数字
程序代码:
#include <stdio.h> #include <stdlib.h> #define size 10//标示数组中数字的个数 //向数组中输入数字 void Input(int *a, int len); //输出数组中的数字 void Output(int *a, int len); //查找数组中的数字 void Search(int *a, int len); void main() { int a[size]; Input(a,size); Output(a,size); Search(a,size); system("pause"); } //向数组中输入数字 void Input(int *a, int len) { for(int i=0; i<len; i++) { a[i] = 2*(i+1); } } //输出数组中的数字 void Output(int *a, int len) { for(int i=0; i<len; i++) { printf("%d ",a[i]); } printf("\n"); } //查找数组中的数字 void Search(int *a, int len) { int num; printf("请输入一个待查找的数字:"); scanf("%d",&num); int tou = 0; int wei = size - 1; int zhong = (tou+wei)/2; while(tou<wei && num != a[zhong]) { if(a[zhong] > num) { wei = zhong - 1; } else if(a[zhong] < num) { tou = zhong + 1; } zhong= (tou + wei)/2; } if(num != a[zhong]) { printf("没找到你需要查找的数字!\n"); } else { printf("找到了,%d在数组中的第%d项!\n", a[zhong], zhong); } }
执行结果:当num = 16时