美文网首页
对分查找、欧几里得、冥运算

对分查找、欧几里得、冥运算

作者: 90后小伙 | 来源:发表于2018-06-22 10:04 被阅读13次

    算法-对分查找(二分查找)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;
        }
    }
    

    相关文章

      网友评论

          本文标题:对分查找、欧几里得、冥运算

          本文链接:https://www.haomeiwen.com/subject/qaohyftx.html