第十七节 算法之二分查找

来源:互联网 发布:cmd怎么测试端口 编辑:程序博客网 时间:2024/05/13 11:58


C语言程序的经典与否很大在于算法是否经典,这一节开始朱兆祺带领大家学习C语言算法篇。
就拿二分查找下手。


// text.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int BinarySeach(int *iArray, int key, int n)
{
int iLow  = 0 ;
int iHigh = n - 1;
int iMid;
//大家想想这是循环呢?还是递归呢。
while (iLow <= iHigh) {
  iMid = (iHigh + iLow)/2;
  if (iArray[iMid] > key) {
   iHigh = iMid - 1 ;
  }  else if (iArray[iMid] < key) {
   iLow = iMid + 1 ;
  }  else{
   return iMid ;
  }
}
}

//测试程序
int main(int argc, char* argv[])
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d\n" , BinarySeach(a,6,10));
return 0;
}

递归调用就是函数对自身的调用,但是一定要慎重使用,递归涉及到栈是否会溢出等问题,还有就是算法是否合适,并非说任何时候都是适合的。
我记得谭浩强的《C……》中用递归算法来解决阶乘的问题,我就疑惑了,使用循环解决岂不是更简单明了。