常用十大算法_二分查找算法

 

【常用十大算法】

二分查找算法,分治算法,动态规划算法,KMP算法,贪心算法,普里姆(prim)算法,克鲁斯卡尔(Kruskal)算法,迪杰斯特拉(Dijkstra)算法,弗洛伊德(Floyd)算法,回溯算法。

 

循环实现二分查找

递归实现二分查找已经在前面说了,可以【猛击此处】了解详情

代码实现:

package cn.dataStructureAndAlgorithm.demo.tenAlgorithm.binarySearch;

import java.util.ArrayList;

public class 循环二分查找_binarySearch {
    public static void main(String[] args) {
        int[] data=new int[]{1,2,3,4,4,4,5,6};
        System.out.println(binarySearch(data,4));

    }
    public static ArrayList binarySearch(int[] data, int target){
        ArrayList result=new ArrayList<>();
        int left=0;
        int right=data.length-1;
        int mid;
        while (left<=right){
            mid=(left+right)/2;
            if (data[mid]==target){
                //同值查找
                //左寻
                int temp=mid-1;
                while (true){
                    if (temp<0 || data[temp]!=target){
                        break;
                    }
                    result.add(temp);
                    temp--;
                }
                //保存中间已匹配到的值
                result.add(mid);
                //右寻
                temp=mid+1;
                while (true){
                    if (temp>data.length-1 || data[temp]!=target){
                        break;
                    }
                    result.add(temp);
                    temp++;
                }
                return result;
            }else if (data[mid]>target){
                right=mid-1;
            }else {
                left=mid+1;
            }
        }
        return result;
    }
}
[3, 4, 5]

 


其他常用算法,见下各链接

【常用十大算法_分治算法】

【常用十大算法_贪心算法】

【常用十大算法_动态规划算法(DP)】

【常用十大算法_KMP算法】

【常用十大算法_普里姆(prim)算法,克鲁斯卡尔(Kruskal)算法】

【常用十大算法_迪杰斯特拉(Dijkstra)算法,弗洛伊德(Floyd)算法】

【常用十大算法_回溯算法】

 

【数据结构与算法整理总结目录 :>】<-- 宝藏在此(doge)  

你可能感兴趣的:(数据结构与算法)