查詢演算法一 二 線性查詢 二分查詢

2021-10-22 16:33:01 字數 2055 閱讀 5725

思路分析:

直接遍歷陣列,查詢和要查詢的元素相等的元素的索引,如果相等,則返回該索引,如果沒找到,則返回

-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...