演算法思想:
首先條件為有序陣列,先查詢中間下標的元素:
(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...