中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么實現一個查找算法

發布時間:2021-08-03 13:57:00 來源:億速云 閱讀:110 作者:Leah 欄目:大數據

這篇文章將為大家詳細講解有關Java中怎么實現一個查找算法,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

線性查找 (linear search)

public class LinearSearchDemo {
    public static void main(String[] args) {
        int[] data = {2, 1, 4, 6, 12, 7};
        int target = 12;
        int searchIndex = search(data, target);
        if (searchIndex != -1) {
            System.out.println("found at: " + searchIndex);
        }else {
            System.out.println("not found");
        }
    }
    /*
     *@param  data   待查找的數組
     *@param  target 待查找的值
     *@return int    目標值在數組中的索引,如果沒找到返回-1
     */
    public static int search(int[] data, int target) {

        int length = data.length;

        //從頭遍歷數組中的各個值,如果找到目標值就返回其索引
        for (int i = 0; i < length; i++) {
            if (data[i] == target) {
                return i;
            }
        }

        //代碼能走到這一步就說明上面的循環遍歷結束了也沒找到目標值
        //即目標值不存在于數組中
        return -1;

    }
}

二分查找( binary search)

二分查找的關鍵點其實是數據順序的有序,數據順序不有序的話,用不了二分查找的

//二分查找:在有序數組中查找某一特定元素的搜索算法
public class BinarySearch {
    public static void main(String[] args) {
        int[] data = {1, 5, 6, 12, 15, 19, 23, 26, 30, 33, 37, 42, 53, 60};
        int target = 19;
        int index = binarySearch3(data, 0, data.length - 1, target);
        if (index > -1) {
            System.out.println("found :" + index);
        }else {
            System.out.println("not found");
        }
    }

    /**
     * 遞歸方法實現二分查找
     * @param data   已排序數組(這里假設是從小到大排序)
     * @param from   起始位置
     * @param to     終止位置
     * @param target 要查找的值
     * @return 要查找的值在數組中的位置,如果沒找到則返回-1
     */
    private static int binarySearch2(int[] data, int from, int to, int target) {
        if (from <= to) {
            int mid = from + (to - from) / 2;//中間位置,為了防止溢出使用這種方式求中間位置
            if (data[mid] < target) {//中間的值比目標值小,則在左半邊繼續查找
                return binarySearch2(data, mid + 1, to, target);
            }else if(data[mid] > target){//中間的值比目標值大,則在右半邊繼續查找
                return binarySearch2(data, from, mid - 1, target);
            }else {//找到了,把找到的情況放在最后是因為多數情況下中間值不是大于就是小于,這樣做可以節省操作
                return mid;
            }
        }
        return -1;
    }

    /**
     * 非遞歸方法實現二分查找
     * @param data   已排序數組(這里假設是從小到大排序)
     * @param from   起始位置
     * @param to     終止位置
     * @param target 要查找的值
     * @return 要查找的值在數組中的位置,如果沒找到則返回-1
     */
    private static int binarySearch3(int[] data, int from, int to, int target) {
        while(from <= to) {
            int mid = from + (to - from) / 2;
            if (data[mid] < target) {
                from = mid + 1;
            }else if(data[mid] > target) {
                to = mid - 1;
            }else {//找到了,把找到的情況放在最后是因為多數情況下中間值不是大于就是小于,這樣做可以節省操作
                return mid;
            }
        }
        return -1;
    }
}

關于Java中怎么實現一個查找算法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

板桥市| 东乡县| 水富县| 马龙县| 康马县| 石渠县| 临沭县| 开封县| 杭锦旗| 潞城市| 江达县| 湘阴县| 永昌县| 皮山县| 宁国市| 洛川县| 南昌县| 琼海市| 航空| 姜堰市| 云南省| 南康市| 东源县| 太白县| 安平县| 密山市| 寻乌县| 望奎县| 东乡县| 怀柔区| 武邑县| 左贡县| 宜城市| 遂溪县| 普陀区| 喀喇沁旗| 通州市| 右玉县| 沿河| 襄樊市| 黄龙县|