在现在找工作的时候,很多面试官都喜欢让人手写二分查找,可是就是这么个简单的程序有时还不能完全写对。注意,二分查找的数组是已经排序好了的。
程序如下:
/*
Author: Yuan Yuan
Date: 2014-06-15
*/
#include <stdio.h>
#include <stdlib.h>
//查找成功返回X的位置,查找失败返回-1
int BinarySearch(const int A[], int X, int N)
{
int Low, Mid, High;
Low = 0;
High = N - 1;
while (Low <= High)
{
Mid = (Low + High) / 2;
if (A[Mid] < X)
Low = Mid + 1;
else
{
if (A[Mid] > X)
High = Mid - 1;
else
return Mid;
}
}
return -1;
}
int main(int argc, char *argv[])
{
int arr[10] = {1, 3, 6, 10, 25, 96, 123, 256, 366, 856};
int temp;
//调用二分查找函数
temp = BinarySearch(arr, 25, 10);
printf("X的位置为: %d\n", temp);
return 0;
}
对于求解最大公约数,很多人可能想到的是用for循环来查找,这样的效率明显不高,我们可以运用欧几里德算法进行求解。
程序如下:
/*
Author: Yuan Yuan
Date: 2014-06-15
*/
#include <stdio.h>
#include <stdlib.h>
unsigned int Gcd(unsigned int M, unsigned int N)
{
unsigned int Rem;
while (N > 0)
{
Rem = M % N;
M = N;
N = Rem;
}
return M;
}
int main(int argc, char *argv[])
{
int temp;
temp = Gcd(50, 15);
printf("最大公约数为: %d\n", temp);
return 0;
}