Java順序查找算法詳解
一、查找的基本概念
在講順序查找法之前先來認(rèn)識一些關(guān)于查找的基本概念。
1.查找表
- 由同一類型的數(shù)據(jù)元素(或記錄)所構(gòu)成的集合
- 數(shù)據(jù)元素之間存在完全松散的關(guān)系
- 非常靈活的數(shù)據(jù)結(jié)構(gòu)
2.關(guān)鍵字
- 關(guān)鍵字是數(shù)據(jù)元素(或記錄)中某個數(shù)據(jù)項的值,可以用它標(biāo)識一個數(shù)據(jù)元素(或記錄)
- 若關(guān)鍵字可以唯一地標(biāo)識一個記錄,則稱之為主關(guān)鍵字
- 反之,若用以識別若干記錄的關(guān)鍵字稱之為次關(guān)鍵字
- 注意,當(dāng)元素只有一個數(shù)據(jù)項時,其關(guān)鍵字即為該數(shù)據(jù)元素的值
3.查找
- 查找是根據(jù)給定的某個值,在查找表中確定一個關(guān)鍵字等于給定值的記錄或者數(shù)據(jù)元素
- 若表中存在該記錄則查找成功,可返回整個記錄的信息或者指示該記錄在查找表中的位置
- 若表中不存在該記錄則查找失敗,可返回一個“空”記錄或者“空”指針
4.動態(tài)查找表與靜態(tài)查找表
- 若在查找的過程中對表做修改操作(如插入或刪除),則相應(yīng)的表稱之為動態(tài)查找表,否則為靜態(tài)查找表
- 即動態(tài)查找表的表結(jié)構(gòu)本身是在查找的過程中所動態(tài)生成的,即在創(chuàng)建表時,對于給定值,若表中存在其關(guān)鍵字所對應(yīng)的記錄,則查找成功返回;否則插入關(guān)鍵字等于給定值的記錄
5.平均查找長度
- 為確定記錄在查找表中的位置,需要和給定值進(jìn)行比較的關(guān)鍵字個數(shù)的期望值,稱為查找算法在查找成功時的平均查找長度(Average Searche Length, ASL)
- 由于查找算法的基本運(yùn)算是關(guān)鍵字之間的比較操作,故可以使用ASL來衡量評估查找算法的性能
- 也可以采用一種很直觀的評估方法——程序執(zhí)行所消耗的時間。文章傳送門
二、順序查找法
1.概念
順序查找(Sequential Search)的查找過程為:從表的一端開始,依次將記錄的關(guān)鍵字和給定的值進(jìn)行比較,若某記錄的關(guān)鍵字和給定值相等,則為查找成功;反之,若掃描整個表之后,仍然未找到關(guān)鍵字和給定值相等的記錄,則為查找失敗。
2.實踐
在給定的無序數(shù)組中查找給定的值
public class DayOne { public static void main(String[] args) { int []a={8,7,45,99,65,23,21,100}; int key1=23; int key2=666; DayOne dayone=new DayOne(); System.out.print("數(shù)組元素:"); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } System.out.println(); System.out.println("查找key1的結(jié)果:"+dayone.search(a,key1)); System.out.println("查找key2的結(jié)果:"+dayone.search(a,key2)); } public String search(int []a,int key){ //初始化變量 int i=0; //掃描整個數(shù)組 while(i<a.length){ //將數(shù)組元素一一與給定值key進(jìn)行比較 if(key==a[i]) return "查找成功! "+key+"是數(shù)組的第"+(i+1)+"個元素";//匹配成功則返回 i++;//當(dāng)前未匹配成功將索引下標(biāo)i后移一位繼續(xù)比對 } //如果循環(huán)遍歷已經(jīng)結(jié)束了還未找到給定值key則表明數(shù)組中不存在該值,查找失敗 return "查找失敗,數(shù)組中不存在該元素!"; } }
執(zhí)行結(jié)果
到此這篇關(guān)于Java順序查找算法詳解的文章就介紹到這了,更多相關(guān)Java順序查找內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Kafka單節(jié)點偽分布式集群搭建實現(xiàn)過程詳解
這篇文章主要介紹了Kafka單節(jié)點偽分布式集群搭建實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11Springboot整合實現(xiàn)郵件發(fā)送的原理詳解
SpringBoot集成郵件服務(wù)非常簡單,通過簡單的學(xué)習(xí)即可快速掌握郵件業(yè)務(wù)類的核心邏輯和企業(yè)郵件的日常服務(wù),本文給大家分享Springboot整合實現(xiàn)郵件發(fā)送的原理,一起看看吧2021-06-06