二分法是一个快速查找的简单算法,当然它要求查找的数组是有序的,看起来好像比暴力要麻烦一些,但是即便加上排序,logn+logn也要比n小,因此在即便加上排序,也要比暴力的时间效率高很多(小白见解,不对请指正,不胜感激),例题代码如下:
1 #include "stdafx.h" 2 #include<cstdlib> 3 #include <iostream> 4 #include <algorithm> 5 //首先明白原理和能写出来还是有很多差距的,其次对于C输入数组,数组作为参数传递,指针的应用等等都还需要慢慢去理解... 6 int DichotomySearch(int Array[],int k,int n) 7 { 8 int min = 1,max =n; 9 int mid; 10 //二分查找核心代码 11 while(min <= max) 12 { 13 mid = (min + max) / 2; 14 if(k < Array[mid]) 15 { 16 max = mid - 1; 17 } 18 else if(k > Array[mid]) 19 { 20 min = mid + 1; 21 } 22 else 23 { 24 return 1; 25 } 26 } 27 return 0; 28 } 29 int _tmain(int argc, _TCHAR* argv[]) 30 { 31 int Array[40000]; 32 int k; 33 int n; 34 printf("请输入将要输入有序数组的长度:"); 35 scanf("%d",&n); 36 printf("请输入一个有序数组:"); 37 for(int i = 1; i <= n; i++)//当输入长度不确定时可以用EOF 38 { 39 scanf("%d",&Array[i]); 40 } 41 printf("请输入一个数字:"); 42 scanf("%d",&k); 43 //必须是有序数组 44 if(DichotomySearch(Array,k,n)) 45 printf("%d在数组中出现过",k); 46 else 47 printf("%d在数组中未出现",k); 48 system("pause"); 49 return 0; 50 }