線性查詢和二分查詢

2022-08-14 04:36:12 字數 2775 閱讀 4213

從第乙個遍歷判斷到最後乙個,查詢到全部符合條件的值。(遍歷陣列找到就返回下標值(如果有多個可先儲存))

1. public

class

seqsearch ;//

沒有順序的陣列  

4.         listsearch = seqsearch(arr, 1);  

5.         if (search.size() == 0)  else

10.     }  

11.   

12.     private

static listseqsearch(int arr, int

value)   

18.         }  

19.         return

list;  

20.   

21.     }  

22. }

1. 首先確定該陣列的中間的下標:mid = (left + right) / 2

2. 然後讓需要查詢的數 findval 和 arr[mid] 比較

2.1 findval > arr[mid] , 說明你要查詢的數在mid 的右邊, 因此需要遞迴的向右查詢

2.2 findval < arr[mid], 說明你要查詢的數在mid 的左邊, 因此需要遞迴的向左查詢

2.3 findval == arr[mid] 說明找到,就返回

什麼時候結束遞迴?

1) 找到就結束遞迴

2) 遞迴完整個陣列,仍然沒有找到findval ,也需要結束遞迴 當left > right就需要退出

思考題 當乙個有序陣列中,有多個相同的數值時,如何將所有的數值都查詢到,比如這裡的 1000.

1. public

class

binarysearch ;  

5.         int search = binarysearch(arr, 0, arr.length - 1, 79);  

6.         listsearchall = binarysearchall(arr, 0, arr.length - 1, 79);  

7.         system.out.println(search);  

8.         system.out.println(searchall);  

9.     }  

10.   

11.     /**

12.      * 

@param

arr     陣列 

13.      * 

@param

left    左邊的索引 

14.      * 

@param

right   右邊的索引 

15.      * 

@param

findval 要查詢的值 

16.      * 

@return

如果找到就返回下標,如果沒有找到,就返回 -1 

17.      

*/18.     private

static

int binarysearch(int arr, int left, int right, int

findval)  else

else

if (findval < arr[mid])  else

30.         }  

31.     }  

32.   

33.     /**

34.      * 思考題:  當乙個有序陣列中, 

35.      * *       有多個相同的數值時,如何將所有的數值都查詢到,比如這裡的 1000 

36.      * * 

37.      * * 思路分析 

38.      * * *1.  在找到 mid 索引值,不要馬上返回 

39.      * * *2. 向 mid 索引值的左邊掃瞄,將所有滿足 1000, 的元素的下標,加入到集合 arraylist 

40.      * * *3. 向 mid 索引值的右邊掃瞄,將所有滿足 1000, 的元素的下標,加入到集合 arraylist 

41.      * * *4. 將 arraylist 返回 

42.      

*/43.     private

static listbinarysearchall(int arr, int left, int right, int

findval)  else

else

if (findval else

65.                 }  

66.   

67.                 //

向 mid 索引值的右邊掃瞄,將所有滿足 1000, 的元素的下標,加入到集合 arraylist  

68.                 temp = mid + 1;  

69.                 while (true

)  else

76.                 }  

77.                 return

list;  

78.             }  

79.         }  

80.     }  

81. }

線性查詢 二分查詢

在陣列中找出某個值a 線性查詢 二分查詢 線性查詢就是乙個個比較,找出那個值a。二分查詢是針對有序數列,找出中間值nid與a比較,mid a,從mid左邊小於mid的值中查詢,這樣依次縮小查詢空間,找到該值。線性查詢法 value 3 array 1,2,3,4,5,6,7 def ls ary,v...

c 線性查詢 二分查詢

今天蒟蒻來給大家講線性查詢 二分查詢 一 線性查詢思路 1.思路 線性查詢是一種在資料中查詢資料的演算法。線性查詢的操作十分簡單,只要在陣列中從頭開始依次往下查詢即可。如果找到了輸出即可,沒有找到就繼續搜下去。2.先來找10好了 第一步 從3開始找,3不等於10,換下乙個 第二步 到9,9不等於10...

查詢 線性查詢,二分查詢,雜湊法

a.linearsearch for i from 0 to n 1if a i key return i return not found b.linearsearch i 0 a n key while a i key i if i n return not found return i區別 a...