亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Java查找算法有哪些?

Java查找算法有哪些?

來源:千鋒教育
發布人:zyh
時間: 2023-06-12 13:56:00 1686549360

  全文大約【3000】字,不說廢話,只講可以讓你學到技術、明白原理的純干貨!本文帶有豐富的案例及配圖視頻,讓你更好地理解和運用文中的技術概念,并可以給你帶來具有足夠啟迪的思考......

Java查找算法有哪些

  一. 查找算法

  1.常用查找算法簡介

  Java中常用的查找算法有如下幾種:

  二分查找法

  線性查找法

  插值查找法

  斐波那契查找法

  接下來小編分別給大家簡單說一下這幾種查找算法是怎么回事。

  (1)二分查找法

  二分查找法,是一種查詢效率非常高的查找算法,又被稱為折半查找法。該算法核心思路就是基于分治策略,將元素排序后,不斷的進行折半查找,時間復雜度是O(log2N),空間復雜度是O(1)。

  (2)線性查找法

  相當于數組循環遍歷的方式,找到了就返回數組下標,沒有就返回-1,適用于有序和無序的數組。

  (3)插值查找法

  該方法是在二分查找的基礎上,使得mid值是自適應的。在數據量較大,關鍵字分布均勻的查找表中。相對于二分查找法,該方法查找速度更快;而當關鍵字分布不均勻時,該方法不一定比二分查找法更好。

  (4)斐波那契查找法

  該方法首先要計算黃金分割點,也就是先把一條線段分成兩部分,使其中一部分與全長之比等于另一部分與這部分之比,取其前三位數字的近似值0.618(黃金分割比例)。其原理與二分查找法類似,但僅改變了mid的值,使其位于黃金分割點附近,即mid = left +F(k-1) -1。該方法適用于有序數組查詢。

  對于以上幾種查找算法,小編重點給大家講一下二分查找法及其實現。

  二. 二分查找法

  簡介

  二分查找法,是一種查詢效率非常高的查找算法,又被稱為折半查找法。該算法核心思路就是基于分治策略,將元素排序后,不斷的進行折半查找,時間復雜度是O(log2N),空間復雜度是O(1)。

  核心思想

  該算法的核心思想其實是采用分治策略,首先要求待查找的序列有序,然后遵循每次查找都縮小一半查找范圍的原則,即每次會取該序列中間位置的值與待查關鍵字進行比較,如果兩者相等,則表示查找成功;如果中間位置的值比待查關鍵字大,則在序列的前半部分循環這個查找的過程;如果中間位置的值比待查關鍵字小, 則在序列的后半部分循環這個查找的過程,直到查找到需要的內容為止。二分查找法的查找過程如下圖所示:

1686299171941.image

  我們可以把上圖的查找過程總結如下:

  1.先對數組進行排序;

  2.計算出數組的中間元素;

  3.將查找的關鍵項key與中間的元素進行比較;

  4.如果key = middle元素,則直接返回中間的索引位置;

  5.如果鍵 > 中間元素,則表示key位于數組的右半部分,則在數組的后半部分(右邊)重復步驟2到4;

  6.如果鍵 < 中間元素,則表示key在數組的左半部分,則我們需要在左半部分重復步驟2到4。

  注意:

  該序列的排序規則與數組的排序順序有關, 即從大到小排序和從小到大排序的結果是不一樣的,且亂序時是不能用二分查找法進行查找的!

  總的來說,二分查找的過程與二叉查找樹的查找過程完全相同。假如我們將一個經過排序的數組,看做是一棵平衡的二叉查找樹,那么數組的中點便是樹的根結點,折半后的中點就是下一層子樹的根結點,以此類推。我們通過不斷的判斷目標值與各樹根結點中值的大小,來決定下一步要查找的元素是在左子樹還是在右子樹。在代碼實現時,我們可以維護兩個指針left和right,指針之間的范圍便是我們的查找范圍。

  優缺點

  二分查找法雖然是一個比較優秀的查找算法,但也是優缺點并存的。

  其優點是查找時的比較次數少,查找速度快,平均性能好;

  其缺點是查找時要求待查表為有序表,且插入刪除困難。

  適用場景

  基于二分查找法的優缺點,我們就可以總結出其適用的場景。

  二分查找法適用于查找頻繁,但變動較少的有序列表,且要求查找的序列是有序的順序結構!比如在程序中搜索排序的數據,尤其是在存儲空間緊湊且有限時使用。

  實現方式

  Java中給我們提供了3種實現二分查找的具體方式,如下:

  使用迭代方式;

  使用遞歸方式;

  使用Arrays.binarySearch()方法。

  接下來小編會分別就這3種方式進行介紹。

  三. 迭代方式實現

  以迭代方式實現二分查找,其實現思路如下:

  ● 先聲明一個數組并對其升序排列;

  ● 然后定義要搜索的key;

  ● 接著計算出數組的中位數,將key與這個中位數進行比較;

  ● 最后根據key是小于還是大于中位數,分別在數組的左半部分或右半部分中搜索該key。

  接下來,小編把以迭代方式實現的代碼列出來。

  代碼實現

  以下就是以迭代方式實現二分查找的代碼:

public class IteratorSearch {

public static void main(String[] args) {
//待查找數組
int[] nums = {15, 2, 9, 3, 18, 1, 66, 20};
//先對數組進行升序排列
Arrays.sort(nums);
System.out.println("數組排序結果:" + Arrays.toString(nums));

//查找關鍵字
int searchKey = 18;
System.out.println("要查找的關鍵字= " + searchKey);

//左側邊界索引
int low = 0;
//右側邊界索引
int high = nums.length - 1;

// 計算中間值索引
int mid = (low + high) / 2;
//循環的進行迭代計算
while (low <= high) {
//如果數組的中間值小于查找關鍵字,則去數組的右側進行折半查找
if (nums[mid] < searchKey) {
//將左側邊界的索引置為mid+1
low = mid + 1;
} else if (nums[mid] == searchKey) {
//如果數組的中間值等于要查找的關鍵字,則表示直接就找到了要查找的內容
System.out.println("要查的內容位于索引[ " + mid +" ]處");
break;
} else {
//如果數組的中間值大于查找關鍵字,則去數組的左側進行折半查找
//此時將右側邊界的索引值置為mid-1
high = mid - 1;
}
//不斷修改mid值
mid = (low + high) / 2;
}

if (low > high) {
System.out.println("數組中沒有要查找的內容!");
}
}

}

   執行結果

  上面代碼的執行結果如下,我們會發現成功的找到了查詢關鍵字。

1686299245705.image

  四. 遞歸方式實現

  以遞歸方式實現二分查找方法,相對于迭代方式來說,是比較簡單的。

  代碼實現

  以下就是以遞歸方式實現二分查找的代碼:

public class RecurrenceSearch {

public static int binarySearch(int[] nums, int low, int high, int searchKey) {
if (high >= low) {
// 計算中間索引
int mid = low + (high - low) / 2;
// 如果中間值等于要查找的關鍵字,直接返回中間值的索引
if (nums[mid] == searchKey) {
return mid;
}

//如果數組的中間值大于查找關鍵字,則去數組的左側進行折半查找
// 此時將右側邊界的索引值置為mid-1
if (nums[mid] > searchKey) {
//進行遞歸調用,修改high的值
return binarySearch(nums, low, mid - 1, searchKey);
} else {
//如果數組的中間值小于查找關鍵字,則去數組的右側進行折半查找,進行遞歸查找,修改low的值
return binarySearch(nums, mid + 1, high, searchKey);
}
}
return -1;
}

public static void main(String[] args) {
//待查找數組
int[] nums = {15, 2, 9, 3, 18, 1, 66, 20};
//先對數組進行升序排列
Arrays.sort(nums);
System.out.println("數組排序結果:" + Arrays.toString(nums));

//查找關鍵字
int searchKey = 3;
System.out.println("要查找的關鍵字= " + searchKey);

int high = nums.length - 1;
int result = binarySearch(nums, 0, high, searchKey);
if (result == -1){
System.out.println("數組中沒有要查找的key!");
} else{
System.out.println("要查的內容位于索引[ " + result +" ]處");
}
}

}

   執行結果

  上面代碼的執行結果如下,我們會發現成功的找到了查詢關鍵字。

1686299272220.image

  五. Arrays.binarySearch()方法實現

  Java中的Arrays類,本身就提供了一個binarySearch()方法,該方法可以直接對給定的數組進行二分查找。該方法會將數組和要搜索的key作為參數,并返回key在數組中的位置,如果找不到該鍵,則該方法會返回-1。

  代碼實現

  Arrays.binarySearch()的代碼實現如下,我們會發現該方式實現起來非常簡單。

public class BinarySearcher {

public static void main(String[] args) {
//待查找數組
int[] nums = {15, 2, 9, 3, 18, 1, 66, 20};
//先對數組進行升序排列
Arrays.sort(nums);
System.out.println("數組排序結果:" + Arrays.toString(nums));

//查找關鍵字
int searchKey = 3;
System.out.println("要查找的關鍵字= " + searchKey);

//直接調用Arrays.binarySearch的二分查找法
int result = Arrays.binarySearch(nums, searchKey);
if (result == -1) {
System.out.println("數組中沒有要查找的key!");
} else {
System.out.println("要查的內容位于索引[ " + result + " ]處");
}
}

}

   執行結果

  上面代碼的執行結果如下,我們會發現成功的找到了查詢關鍵字。

1686299290568.image

聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
人妻无码人妻有码中文字幕在线| 亚洲熟妇XXXXX色黄妇| 女儿的朋友6中汉字| 国产午夜福利100集发布| AⅤ中文字幕不卡在线无码| 亚洲AV永久无码精品国产精品| 日本VA欧美VA精品发布| 理论片午午伦夜理片久久| 国产A在亚洲线播放| A级毛片免费高清视频| 亚洲最大综合久久网成人| 亚洲AV激情无码专区在线下载| 色婷婷综合激情综在线播放| 免费A级毛片无码樱桃视频| 精品韩国亚洲AV无码不卡区| 啊灬啊灬啊灬快灬高潮了电影片段| 亚洲AV麻豆AⅤ无码电影| 少妇99久久黑人| 人C交Z〇○Z〇○ⅩⅩ| 男女嘿咻激烈爱爱动态图| 精品无码无人网站免费视频| 草莓视频CAOMEI888| YY8男人的天堂| AV无码人妻中文字幕| 中文字幕亚洲日韩无线码| 一区二区操逼视频| 性刺激性色爽爱小说| 为什么放进去女的就老实了| 色悠久久久久综合网国产| 人妻无码少妇一区二区| 人妻少妇精品视频专区| 男人激烈吮乳吃奶动态图| 妺妺窝人体色www在线观看婚闹 | 国偷自产视频一区二区久| 国产乱人伦偷精品视频不卡| 国产青草视频在线观看| 国模GOGO中国人体私拍| 好男人好资源神马在线观看| 极度另类FREESEX强行真实| 精品亚洲国产成人AV在线时间短 | 日韩A级成人免费无码视频| 女角色翻白眼流口水流眼泪图片 | 少妇18p一区二区三区| 熟妇人妻精品一区二区三区颏| 特大黑人巨交吊性XXXX| 亚洲A∨国产AV综合AV下载| 亚洲A片成人无码久久精品色欲 | 久久精品成人无码观看免费 | 亚洲日韩AA特黄毛片试看| 亚洲乱亚洲乱妇24P| 中国女RAPPER大妈| YYYY11111少妇影院| 公么的大龟征服了我BD | 四川老妇山边性对白| 一本一本久久A久久精品综合 | 无码内射成人免费喷射| 十八禁羞羞视频爽爽爽| 色综合久久中文字幕无码| 日韩av一区二区三区| 国产目拍亚洲精品一区| 国产精品99无码一区二蜜桃| 极品少妇被黑人白浆直流 | 国产手机在线精品| 极品美女扒开粉嫩小泬的视频| 国色天香在线视频免费观看| 国产在线精品成人一区二区三区| 久爱无码精品免费视频在线观看| 欧美极品少妇XXXXⅩ高跟鞋| 挺进朋友人妻的身体里| 幼儿HIPHOP仙踪林的| 果冻传媒免费观看4399飘雪| 国产92成人精品视频免费| 国产一精品一AV一免费| 男女作爱在线播放免费网站| 十八禁无遮无拦视频免费| 无码人妻束缚av又粗又大| 精品久久香蕉国产线看观看亚洲| 欧美日韩国产免费一区二区三区| 无码日韩精品一区二区人妻| 真实国产老熟女粗口对白| 国产成人精品A∨一区二区| 麻豆国产AV丝袜白领传媒| 无码激情亚洲一区| 97人妻无码一区二区精品免费| 国产亚洲AV☆浪潮在线观看| 欧美性色黄大片手机版| 亚洲综合成人婷婷五月网址| 国产99久久久国产精品~~牛| 久久婷婷综合缴情亚洲狠狠_| 少妇人妻陈艳和黑人教练| 2023极品少妇XXXO露脸| 夫妇交换聚会群4P疯狂大战视频| 久久天天躁狠狠躁夜夜AV| 天天做天天爱天天综合网| AV永久免费网站入口| 久久夜色精品国产噜噜亚洲SV | 中文字幕色偷偷人妻久久| 国产男女猛烈无遮挡免费网站 | 白嫩美女被内射59| 男女无遮挡XX00动态图120秒 | 久久66热人妻偷产精品9| 日本一二三区视频在线| 99精品视频在线观看免费| 国产精品久久毛片| 少妇被粗大的猛烈进出视频| 亚洲中字幕日产AV片在线| 国产无套乱子伦精彩是白视频| 色视频WWW在线播放国产人成| JZZIJZZIJ亚洲成熟少妇| 久久无码人妻精品一区二区三区| 亚洲精品成人H在线观看| 国产精品自在线拍国产手青青机版 | 久久久久精品老熟女国产精品| 亚洲AV无码AV有码AV| 国产无套乱子伦精彩是白视频| 无码AⅤ精品一区二区三区| 伽罗ちゃんが腿法| 人人妻人人澡人人爽欧美一区九九| AV不卡秒播在线观看| 欧美性色欧美A在线播放| ZOOM与人性ZOOM视频| 人与野鲁交XXXⅩ视频| 成人午夜高潮刺激免费视频| 日本熟妇色XXXXX日本免费看| 99精产国品一二三产区区| 欧美激情一区蜜桃传媒| 暗交小拗女一区二区三区电影| 日本适合十八岁以上的护肤品男| 成人免费A级毛片久久| 四川丰满少妇A级毛片| 国产精品自在线拍国产| 亚洲AV无码成人精品区在线观看 | 宝贝你的奶好大我想吃| 少妇人妻偷人精系列| 国产又粗又猛又爽又黄的网站 | 国产成 人 综合 亚洲专区| 小烂货夹得好紧太爽了H苏妖精| 精品国产乱码久久久久软件| 亚洲产国偷v产偷v自拍浪潮AV| 九九视频在线观看视频6| 337P人体粉嫩胞高清大图AV| 人禽杂交18禁网站免费| 国产看黄网站又黄又爽又色| 亚洲无线观看国产高清| 欧美乱大交XXXXX性喷潮| 夫妇交换聚会群4P疯狂大战视频| 亚洲AV永久青草无码精品| 麻豆我精产国品一二三产区区别| 啊灬啊灬别停啊灬用力啊免费| 人人妻人人做人人爽| 国产又色又刺激高潮免费视频试看| 一本大道久久A久久综合| 人妻无码AⅤ中文字幕系列| 国产午夜精品一区二区三区老| 永久免费看啪啪网址入口| 色婷婷AV一区二区三区在线观看 | 两男一女两根同进去舒服吗| 多毛熟女HDVIDOS| 性色做爰片在线观看WW| 久久国语露脸国产精品电影| 超碰色偷偷男人的天堂| 无码纯肉视频在线观看喷水| 蜜臀亚洲AV无码精品国产午夜| 2019NV天堂香蕉在线观看| 天堂在\/线中文在线8| 久久久久久久女国产乱让韩| 赤裸羔羊Ⅲ致命快感| 亚洲欧美日韩综合久久久| 日本极品少妇XXXX| 国产午夜亚洲精品理论片八戒 | 久久人妻内射无码一区三区 | 三上悠亚AV影院在线看| 久久亚洲精品无码VA大香大香| 班长哭了能不能再抠游戏里面的钱| 亚洲国产欧洲综合997久久| 欧美激情XXXX| 国产一区二区三区美女| 成人无码H动漫在线网站樱花| 夜夜澡天天碰人人爱AV| 无码精品人妻一区二区三区涩爱 | 欧美乱强伦XXXXXXXXXX| 国产精品免费看久久久8| 薄荷奶糖(1V2)笔趣| 亚洲人成电影网站色WWW| 性──交──性──乱| 少妇99久久黑人| 内射爽无广熟女亚洲| 久久久久亚洲AV无码专区网站| 国产在线观看无码免费视频| 囯产精品一品二区三区| 白嫖B站激活码2023| 7777精品久久久大香线蕉| 一本一本大道香蕉久在线精品| 性色A∨精品高清在线观看| 人妻丰满熟妇AV无码处处不卡| 免费A级毛片无码免费视频120| 好黄好污美女裸体网站| 国产亚洲精品线观看K频道| 丰满的人妻HD高清日本| 非洲BBOOMBBOOM的含义|