算法-对分查找(二分查找)C++实现
验证x是否是居中的元素,如果是,则找到答案,如果小于居中元素,那么取左边已排序的子序列,否则取右边已排序的子序列
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 (x > a[mid]) {
low = mid + 1;
} else if (x < a[mid]) {
high = mid - 1;
} else {
return mid;
}
}
return -1;
}
欧几里得算法
欧几里得算法也叫辗转相除法,是求两个整数最大公约数的算法
当然也可以求最小公倍数
算法实现
其实算法的实现原理就是,有整数a b两个,每次求的一个数字r = a % b,然后把b放到a的位置,把r放到b的位置,递归调用。
结束条件是当 a%b == 0的时候停止。
unsigned int gcd(unsigned int m, unsigned int n) {
unsigned int temp;
if (m < n) {
n = m + n;
m = n - m;
n = n - m;
}
while (n > 0) {
temp = m % n;
m = n;
n = temp;
}
return m;
}
冥运算
取冥的一半,做递归运算,这样就减少了运行时间
long int the_pow(long int x, unsigned int n) {
if (n == 0) {
return 1;
} else if (n == 1) {
return x;
} else if (n%2 == 0) {
return the_pow(x*x, n/2);
} else {
return the_pow(x*x, n/2)*x;
}
}