经典算法分析


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)){

            //调用递归算法

            return pow(x*x,n/2);

        }else{

            //如果是奇数

            return pow(x*x,n/2)*x;

        }

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值