最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java利用泛型實現(xiàn)折半查找法

 更新時間:2022年08月19日 11:34:00   作者:小虛竹and掘金  
泛型是JAVA重要的特性,使用泛型編程,可以使代碼復(fù)用率提高。查找作為泛型的一個簡單應(yīng)用,本文將使用泛型實現(xiàn)折半查找法,感興趣的可以了解一下

泛型化的折半查找法

1.題目

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

實現(xiàn):查找作為泛型的一個簡單應(yīng)用,使用泛型實現(xiàn)折半查找法

2.解題思路

創(chuàng)建一個類:BinSearch。

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

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

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

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

3.代碼詳解

package com.xiaoxuzhu;
import java.util.Arrays;
/**
 * Description:
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改記錄:
 * 修改后版本	        修改人		修改日期			修改內(nèi)容
 * 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("數(shù)據(jù)集合:");
        System.out.println(Arrays.toString(ints));
        System.out.println("元素3所對于的索引序號:"+search(ints, 3));
    }
}

知識點補(bǔ)充

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

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

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

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

答案:你每次猜中間數(shù)。

代碼實現(xiàn):

//只適合有序的數(shù)組
#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("找到了,下標(biāo)是%d\n", mid);
    else
        printf("找不到");
    system("pause");
    return 0;
}

如何實現(xiàn)一個二分查找函數(shù):

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;
}

到此這篇關(guān)于Java利用泛型實現(xiàn)折半查找法的文章就介紹到這了,更多相關(guān)Java折半查找法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis中的resultType和resultMap查詢操作實例詳解

    Mybatis中的resultType和resultMap查詢操作實例詳解

    resultType是直接表示返回類型的,而resultMap則是對外部ResultMap的引用,resultMap解決復(fù)雜查詢是的映射問題。這篇文章主要介紹了Mybatis中的resultType和resultMap查詢操作實例詳解,需要的朋友可以參考下
    2016-09-09
  • Java增強(qiáng)for循環(huán)的增刪操作代碼

    Java增強(qiáng)for循環(huán)的增刪操作代碼

    Foreach循環(huán)(Foreach loop)是計算機(jī)編程語言中的一種控制流程語句,通常用來循環(huán)遍歷數(shù)組或集合中的元素,本文通過實例演示普通for循環(huán)和foreach循環(huán)使用,java增強(qiáng)for循環(huán)的操作代碼感興趣的朋友一起看看吧
    2024-02-02
  • SpringBoot連接PostgreSQL+MybatisPlus入門案例(代碼詳解)

    SpringBoot連接PostgreSQL+MybatisPlus入門案例(代碼詳解)

    這篇文章主要介紹了SpringBoot連接PostgreSQL+MybatisPlus入門案例,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • java定時任務(wù)Timer和TimerTask使用詳解

    java定時任務(wù)Timer和TimerTask使用詳解

    這篇文章主要為大家詳細(xì)介紹了java定時任務(wù)Timer和TimerTask使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • springboot中spring.profiles.include的妙用分享

    springboot中spring.profiles.include的妙用分享

    這篇文章主要介紹了springboot中spring.profiles.include的妙用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • java字符串轉(zhuǎn)數(shù)字及各種數(shù)字轉(zhuǎn)字符串的3種方法

    java字符串轉(zhuǎn)數(shù)字及各種數(shù)字轉(zhuǎn)字符串的3種方法

    這篇文章主要介紹了java字符串轉(zhuǎn)數(shù)字及各種數(shù)字轉(zhuǎn)字符串的3種方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Android?Studio中創(chuàng)建java工程的完整步驟

    Android?Studio中創(chuàng)建java工程的完整步驟

    Android?Studio創(chuàng)建java工程是非常麻煩的,因為Android?Studio沒有提供直接創(chuàng)建java工程的方法,下面這篇文章主要給大家介紹了關(guān)于Android?Studio中創(chuàng)建java工程的完整步驟,需要的朋友可以參考下
    2024-01-01
  • 導(dǎo)入SpringCloud依賴踩的坑及解決

    導(dǎo)入SpringCloud依賴踩的坑及解決

    這篇文章主要介紹了導(dǎo)入SpringCloud依賴踩的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • jvm內(nèi)存溢出解決方法(jvm內(nèi)存溢出怎么解決)

    jvm內(nèi)存溢出解決方法(jvm內(nèi)存溢出怎么解決)

    jvm內(nèi)存溢出解決方法,詳細(xì)內(nèi)容看下面解釋
    2013-12-12
  • Java通過反射查看類的信息示例

    Java通過反射查看類的信息示例

    這篇文章主要介紹了Java通過反射查看類的信息,結(jié)合實例形式詳細(xì)分析了java基于反射獲取類信息的相關(guān)原理與實現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07

最新評論

万盛区| 元朗区| 宜川县| 罗源县| 嘉善县| 两当县| 合阳县| 旌德县| 桐柏县| 北碚区| 永靖县| 徐水县| 保德县| 苍南县| 黎城县| 石河子市| 桐庐县| 依安县| 灵石县| 饶阳县| 沙河市| 张家港市| 武隆县| 汤阴县| 新闻| 白水县| 珠海市| 顺义区| 改则县| 无为县| 六枝特区| 赤壁市| 昌平区| 宿松县| 年辖:市辖区| 盐边县| 大连市| 呼玛县| 屯昌县| 博野县| 清徐县|