通過最近的看書學習,獲益匪淺。
下面介紹一種折半查詢演算法:
比如我買了一雙鞋,你好奇問我多少錢,我說不超過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.基本思路 在有序表中,取中間元素作為比較物件,若給定值與中間元素的要查詢的數相等,則查詢成功 若給定值小於中間元素的要查詢的數,則在中間元素的左半區繼續查詢 若給定值大於中間元素的要查詢的數,則在中間元素的右半區繼續查詢。不斷...