思路分析:
直接遍歷陣列,查詢和要查詢的元素相等的元素的索引,如果相等,則返回該索引,如果沒找到,則返回**演示:-1;如果可能存在多個的索引時,則可以把每乙個索引放入list集合中,返回list集合即可
只找乙個索引的情況:
public
static
intlinesearch
(int
arr,
int value)
}return-1
;}
要找所有索引的情況:
public
static list
linesearch2
(int
arr,
int value)
}return list;
}
二分查詢有乙個前提:該陣列必須有序,否則不能使用二分查詢思路分析:
利用遞迴的思想,取得中間位置的索引,把這個索引對應的元素和要查詢的值相比較,如果相等,則返回該索引,如果小於該索引對應的元素,則在該索引的左邊繼續二分查詢(即遞迴),直到找到與查詢值相等元素的索引;如果大於該中間元素,思路相同。注意:這裡可能找不到相等的元素,若找不到則返回 -1.舉例說明找不到的情況:
比如,要查詢的元素的值為 6,最後一次遞迴得到的兩個元素是 5,7;此時中間索引對應的元素值一定是 5(因為此時5和7的索引是連續的,和為奇數, / 2一定是較小的那個索引), 由於 6 >5,則呼叫**演示:return binarysearch(arr, mid + 1, right, value);
,此時遞迴的陣列只有 7這乙個元素,中間索引對應的值只能是 7,,又此時left = right
,當再次呼叫遞迴return binarysearch(arr, mid + 1, right, value);
時,得到的left > right,返回 -1
只找乙個索引的情況:
public
static
intbinarysearch
(int
arr,
int left,
int right,
int value)
if(value < arr[mid]
)else
if(value > arr[mid]
)else
}
要找所有索引的情況:
// 當查詢到的結果索引有多個時,返回所有的索引
public
static list
binarysearch2
(int
arr,
int left,
int right,
int value)
if(value < arr[mid]
)else
if(value > arr[mid]
)else
// 將 arr[mid] 的索引加入到集合中
resultlist.
add(mid)
;// 向mid索引的右邊掃瞄,如果等於 arr[mid],則加入到集合中
temp = mid +1;
while
(temp <= right && arr[temp]
== arr[mid]
)return resultlist;
}}
查詢(一)二分查詢
基本思想 說明 元素必須是有序的,如果是無序的則要先進行排序操作。也稱為是折半查詢,屬於有序查詢演算法。用給定值k先與中間結點的關鍵字比較,中間結點把線形表分成兩個子表,若相等則查詢成功 若不相等,再根據k與該中間結點關鍵字的比較結果確定下一步查詢哪個子表,這樣遞迴進行,直到查詢到或查詢結束發現表中...
線性查詢 二分查詢
在陣列中找出某個值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...