avatar

java实现二分查找非递归算法和汉诺塔算法

二分查找非递归算法

package com.csw.algorithm.binarysearchnorecursion;

/**
* @Auther: 行路
* @Date: Created on 2020/5/2 13:36 星期六
* @Description: com.csw.algorithm.binarysearchnorecursion
* @version: 1.0 二分查找非递归算法
*/
public class BinarySearch {
public static void main(String[] args) {
int[] arr={1,3,8,10,11,67,100};
int i = binarySearch(arr,11);
System.out.println("下标为:"+i);

}


/**
* 二分查找的非递归实现
* @param arr 待查找的数组 升序排列
* @param target 需要查找的数
* @return 返回对应的下标,-1表示没有找到
*/
public static int binarySearch(int[] arr,int target){
int left=0;
int right=arr.length-1;
while (left<=right){
//说明继续查找
int mid=(left+right)/2;
if(arr[mid]==target){
return mid;
}else if(arr[mid]>target){
right=mid-1;
}else{
left=mid+1;
}
}
return -1;
}
}

汉诺塔算法

package com.csw.algorithm.dac;

/**
* @Auther: 行路
* @Date: Created on 2020/5/3 13:53 星期天
* @Description: com.csw.algorithm.dac 分治算法(汉诺塔)
* @version: 1.0
*/
public class HanoiTower {
public static void main(String[] args) {
hanoiTower(64,'A','B','C');
}

//汉诺塔的移动方法
//使用分治算法
public static void hanoiTower(int num,char a,char b,char c){
//如果只有一个盘
if(num==1){
System.out.println("第1个盘从"+a+"->"+c);
}else{
//如果我们只有n>=2 情况,我们总是可以看作是两个盘1,最下边的一个盘2,上面的所有盘
//1.先把最上面的所有盘A-B,移动过程会使用到c
hanoiTower(num-1,a,c,b);
//2.把下面的盘a-c
System.out.println("第"+num+"个盘从"+a+"->"+c);
//3.把B塔所有盘从B-C,移动过程中使用a塔
hanoiTower(num-1,b,a,c);
}
}
}
文章作者: Todcsw
文章链接: https://todcsw.github.io/2020/05/03/dataStructure-java%E5%AE%9E%E7%8E%B0%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE%E9%9D%9E%E9%80%92%E5%BD%92%E7%AE%97%E6%B3%95%E5%92%8C%E6%B1%89%E8%AF%BA%E5%A1%94%E7%AE%97%E6%B3%95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 行路のblog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论