经典算法分析

来源:互联网 发布:栅格数据 查找工具 编辑:程序博客网 时间:2024/05/16 18:29


1折半查找。,当给出的数组绝对有序时,可以使用折半查找的办法,可以将时间复杂度降低到logN级别。

package sort;

 

public class HalfSort {

 

    public static <AnyType extends Comparable<?super AnyType>> int binarySearch(

            AnyType[] a, AnyType x) {

        //定义两个游标,分别指向数组的开头和结尾

        int low = 0, high = a.length - 1;

        while (low <= high) {

            //找到中间的元素

            int mid = (low + high) / 2;

            //如果中间的那个元素小于比较的值,则从中间值的下一个到最后开始找

            if (a[mid].compareTo(x) < 0) {

                low = mid + 1;

            } else if (a[mid].compareTo(x) > 0) {

                high = mid - 1;

            } else {

                return mid;

            }

        }

 

        return -1;

 

    }

}

 

欧几里算法:

欧几里算法主要用来计算两个整数的最大公因式。。

public class GCD {

    public static long gcd(long m,long n) {

        while (n != 0) {

            long rem = m %n;

            m = n;

            n = rem;

        }

        return m;

    }

}

 

 

幂运算的解决办法。

计算X^N幂运算的思路是利用递归,将N<=1作为递归的基准情况,否则,如果N是偶数,我们有X^N=X^N/2* X^N/2,如果N是奇数,则X^N=X^(N-1)/2* X^(N-1)/2,所需要的乘法次数最多是2LogN

 

package sort;

 

public class POW {

    public static long pow(long x,int n){

        if(n==0){

            return 1;

        }

        if(n==1){

            return x;

        }

        //如果是偶数

        if(isEven(n)){

            //调用递归算法

            returnpow(x*x,n/2);

        }else{

            //如果是奇数

            returnpow(x*x,n/2)*x;

        }

    }

}

 

0 0