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

溫馨提示×

溫馨提示×

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

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

Java怎么利用泛型實現折半查找法

發布時間:2022-08-25 17:45:29 來源:億速云 閱讀:115 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Java怎么利用泛型實現折半查找法”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java怎么利用泛型實現折半查找法”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    泛型化的折半查找法

    1.題目

    泛型是JAVA重要的特性,使用泛型編程,可以使代碼復用率提高。

    實現:查找作為泛型的一個簡單應用,使用泛型實現折半查找法

    2.解題思路

    創建一個類:BinSearch。

    折半查找要求數據集合中的元素必須可比較,并且各元素按升序或降序排列。取集合的中間元素作為比較對象,如:

    (1)如果給定的值與比較對象相等,則查找成功,返回中間元素的序號。

    (2)如果給定的值大于比較對象,則在中間元素的右半段進行查找。

    (3)如果給定的值小于比較對象,則在中間元素的左半段進行查找。

    3.代碼詳解

    package com.xiaoxuzhu;
    import java.util.Arrays;
    /**
     * Description:
     *
     * @author xiaoxuzhu
     * @version 1.0
     *
     * <pre>
     * 修改記錄:
     * 修改后版本	        修改人		修改日期			修改內容
     * 2022/5/10.1	    xiaoxuzhu		2022/5/10		    Create
     * </pre>
     * @date 2022/5/10
     */
    
    
    public class BinSearch {
        public static <T extends Comparable<? super T>>  int search(T[] array, T key) {
            int low = 0;
            int mid = 0;
            int high = array.length;
            System.out.println("查找的中間值:");
            while (low <= high) {
                mid = (low + high) / 2;
                System.out.print(mid+" ");
                if (key.compareTo(array[mid]) > 0) {
                    low = mid + 1;
                } else if (key.compareTo(array[mid]) < 0) {
                    high = mid - 1;
                } else {
                    System.out.println();
                    return mid;
                }
            }
            return -1;
        }
    
        public static void main(String[] args) {
            Integer[] ints = {1,2,3,4,5,6,7,8,9,10};
            System.out.println("數據集合:");
            System.out.println(Arrays.toString(ints));
            System.out.println("元素3所對于的索引序號:"+search(ints, 3));
        }
    }

    Java怎么利用泛型實現折半查找法

    知識點補充

    折半查找法是效率較高的一種查找方法。假設有已經按照從小到大的順序排列好的五個整數a0~a4,要查找的數是X,其基本思想是: 設查找數據的范圍下限為l=0,上限為h=4,求中點m=(l+h)/2,用X與中點元素am比較,若X等于am,即找到,停止查找;否則,若X大于am,替換下限l=m+1,到下半段繼續查找;若X小于am,換上限h=m-1,到上半段繼續查找;如此重復前面的過程直到找到或者l>h為止。如果l>h,說明沒有此數,打印找不到信息,程序結束。

    該方法是查找的范圍不斷縮小一半,所以查找效率較高。

    下面將通過一個例題,帶大家深入了解一下折半查找法

    比如我買了一雙鞋,你好奇問我多少錢,我說不超過300元。你還是好奇,你想知道到底多少,我就讓你猜,你會 怎么猜?

    答案:你每次猜中間數。

    代碼實現:

    //只適合有序的數組
    #include<stdlib.h>
    #include<stdio.h>
    int main()
    {
        int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        int left = 0;
        int right = sizeof(arr) / sizeof(arr[0]) - 1;
        int key = 7;
        int mid = 0;
        while (left <= right)
        {
            mid = (left + right) / 2;
            if (arr[mid] > key)
            {
                right = mid - 1;
            }
            else if (arr[mid] < key)
            {
                left = mid + 1;
            }
            else
            {
                break;
            }
        }
        if (left <= right)
            printf("找到了,下標是%d\n", mid);
        else
            printf("找不到");
        system("pause");
        return 0;
    }

    如何實現一個二分查找函數:

    int bin_search(int arr[], int left, int right, int key)
    {
        int mid = 0;
        while (left <= right)
        {
            int mid = (left + right) >> 1;
            if (arr[mid] > key)
                right = mid - 1;
            else if (arr[mid] < key)
                left = mid + 1;
            else
                return mid;
        }
        return -1;
    }

    讀到這里,這篇“Java怎么利用泛型實現折半查找法”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

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

    AI

    京山县| 锡林浩特市| 湖北省| 绥宁县| 百色市| 泌阳县| 寿光市| 六安市| 平山县| 江油市| 乌鲁木齐县| 阿克苏市| 上高县| 城固县| 龙胜| 德清县| 平和县| 工布江达县| 连江县| 宜州市| 商都县| 望江县| 同江市| 镇江市| 临沂市| 安溪县| 黑河市| 武安市| 错那县| 蒙山县| 富阳市| 曲麻莱县| 麟游县| 惠水县| 新泰市| 双城市| 基隆市| 思南县| 石家庄市| 小金县| 辽中县|