提高迴圈的效率 折半查詢演算法

2021-08-03 06:31:06 字數 786 閱讀 6141

通過最近的看書學習,獲益匪淺。

下面介紹一種折半查詢演算法:

比如我買了一雙鞋,你好奇問我多少錢,我說不超過300,然後讓你猜,那麼你一定每次猜中間數。

舉個例子,若實現在主函式內,一有序陣列中尋找7在哪

那麼就不用一一查詢,直接用這種演算法,最多隻計算4次。

#include

int main()

;int left = 0; //定義左值

int right = sizeof(arr)/sizeof(arr[0])-1; //定義右值

int i = 0;

int key = 7;

int mid = 0; //定義中間值

while(left<=right)

else if(arr[mid]

else

}  if(left <= right)

printf("%d",mid);

else

printf("no");

return 0;

};另外,再介紹一種比較好的求平均值的辦法,比如當球兩個整形a和b的平均值,若a+b大於最大值,那麼程式一定出錯。

如果用大的數減去小的數的一半給小的數,那麼就是平均值,這樣做不會超過最大值,所以程式不會出錯。

具體:兩個整形a和b(a

求平均值x:x=a+(b-a)/2

如何提高 for 迴圈效率?

一般是三個方法 1 預分配 即在for迴圈前,將輸出結果矩陣預先分配。例如 a 0 0 0 for i 1 3 a i i end這樣在 for 迴圈中,就不會在記憶體中,每次對變數a進行再分配了。2 向量化 matlab 中,矩陣運算會比 for 迴圈效率更高,例如對乙個矩陣的所有元素求 sin ...

查詢演算法 折半查詢演算法

折半查詢演算法 binary search param a 乙個有序的集合 本次為由小到大 param x 需要查詢的值 ps 首先使用折半演算法的時候 集合必須是有序的 eg a 1,3,5,7,9 x 3 a mid low height 1,3,5,7,9 2 0 1 1,3 0 1 1 3 ...

查詢演算法 折半查詢

本小節知識點 1.掌握 基本思路 2.掌握 實現步驟 3.了解 練習 1.基本思路 在有序表中,取中間元素作為比較物件,若給定值與中間元素的要查詢的數相等,則查詢成功 若給定值小於中間元素的要查詢的數,則在中間元素的左半區繼續查詢 若給定值大於中間元素的要查詢的數,則在中間元素的右半區繼續查詢。不斷...