二分法在有序陣列中查詢乙個數

2021-09-23 08:00:06 字數 1340 閱讀 4205

演算法思想:

首先條件為有序陣列,先查詢中間下標的元素:

(1)如果該元素等於7,則返回中間下標,查詢結束;

(2)如果該元素大於7,則7必然在中間元素的右邊部分,則縮小範圍,在右半部分查詢7,再計算右半部分的中間下標,轉到(1)

(3)如果該元素下於7,則7必然在中間元素的左半部分,則縮小範圍,在左半部分查詢7,再計算左半部分的中間下標,轉到(1)

優點:

對於已排好序的大陣列起到效率很高地查詢作用。

時間複雜度:

查詢資料長度為n,每次查詢後減半,

第1次 n/2 … 第k次 n/2^k,最壞的情況下第k次才找到,此時只剩乙個資料,長度為1。

即 n/2^k = 1,查詢次數 k=log2(n)。

時間複雜度為:log n

時間複雜度大小排序:o(1) < o(logn) < o(n) < o(nlogn) < o(n^2) < o(n^3) < o(2^n)

法一:

#include#define n 9

/*int main()

; //程式在編譯執行的時候,普通變》量存放在棧區,static會使變數存放在data區,data區一般不能改變(比如常量,字串

等)。整個記憶體分為四大區:code**區,data資料區,stack棧區,heap區(由程式設計師》自己定義大小)。

int i,mid,key;

int left = 0;

int right = n-1;

printf("請輸入你要查詢的數:");

while(scanf("%d",&key) != 1)

if(keya[n-1])

while(left<=right) //如果left>right,說明沒有找到

else if(a[mid] < key)

else

}}

法二:

int main()

; int i,mid,found,key;

int left = 0;

int right = n-1;

printf("請輸入你要查詢的數:");

while(scanf("%d",&key) != 1)

while(left<=right)

else if(a[mid] < key)

else

}if(found == 1)

else

}

二分法查詢有序陣列

package array public class testbinarysearch 指定查詢的元素 int num 12 用二分法查詢,返回索引 int start 0 int end arr.length 1 end的設定應該為陣列最後一位 int index 1 用於標誌是否查詢到指定元素 ...

二分法 在有序陣列裡,是否存在某個數

在有序陣列裡,是否存在某個數 package practice01 import j a.util.arrays 二分法 在有序陣列裡,是否存在某個數 public class demo04 int l 0 左索引int r sortedarr.length 1 右索引int mid 0 中點whi...

查詢有序陣列元素 二分法

查詢的方法多種多樣,今天提到的就是對於乙個有序陣列而言最方便最高效率的方法 二分法,也叫折半查詢。具體 如下 二分法,也叫折半查詢 include include intb search int a,int left,int right,int k else if a mid k else retu...