演算法設計技巧與分析(1)二分搜尋的前提 線性搜尋

2022-09-22 19:45:20 字數 1529 閱讀 7099

從今天起複習演算法,寫的不對的地方還請各路大神指點迷津,神仙請繞道。

1.問題描述

給定乙個長度為n的陣列a,查詢元素x是否在a中。

2.解決方案描述

一種最直接的方法是掃瞄a中的所有專案,將每個專案與x比較,如果找到相等的專案a[i],則返回陣列下標i,否則返回-1,表示沒找到。這種方法成為順序搜尋,由於元素比較的最大次數和序列的大小成線性關係,所以又稱為線性搜尋。

3.演算法的**表示

複製**

1     ///

2     /// 線性搜尋

3     ///

4     /// 搜尋的源陣列

5     /// 要搜尋的值

6     /// 如果找到該值,返回該值所在的陣列下標;否則返回-1

7     static int linearsearch(int array, int x)

8     

15         return -1;

16     }

複製**

4.演算法的呼叫

複製**

1         static void main(string args)

2         ;

4             console.writeline("測試陣列為:");

5             for (int i = 0; i < testarray.length; i++)

6             ", testarray[i]);

8             }

9             console.writeline("\r\n請輸入你要查詢的整數:");

10             string targetnum = console.readline();

11             int num;

12             while (!int.tryparse(targetnum, out num))

13            

17             int result = linearsearch(testarray, num);

18             if (result != -1)

19                 console.writeline("你查詢的數字在該陣列的下標為:", result);

20             else

21                 console.writeline("在該陣列中找不到你輸入的數字");

22             console.read();

23         }    

複製**

5.演算法分析

直觀上,如果陣列是無序的,那麼掃瞄a中所有元素是不可避免的。但是如果陣列是有序的,那麼掃瞄a中所有元素則不是最佳選擇。比如陣列為,如果我要搜尋6是否在陣列中,那麼我將要掃瞄6次,這是最耗時的搜尋。

那麼如何保證在最短時間內找到有序陣列裡的元素呢?下節見分曉。

演算法分析與設計二分搜尋問題Python

設a 0 n 1 是已排好序的陣列。試改寫二分搜尋演算法,使得當搜尋元素x不在陣列a中時,返回小於x的最大元素的位置i和大於x的最小元素的位置j 當搜尋元素x在陣列a中時,返回x在陣列中的位置,此時i和j相同。def binary search arr list,arr lookup arr lon...

演算法 二分搜尋

思路 首先從陣列中間的數把陣列分成兩部分,如果查詢的數比中間的數大,說明接下來需要查詢右邊的部分,令中間的的下標 1為下一次開始查詢的開始位置,再從low到high之間查詢,一直迴圈。root bogon code cat erfen.c include int work int x,int a,i...

二分搜尋與STL二分查詢

用法 搜尋非遞減數列中是否包含某個元素 當資料量比較大的時候,二分比線性搜尋高效得多。流程 查詢36 實現 物件是非遞減序列,如果當資料無序時,需要預先進行一次排序。int binarysearch int a,int key,int n n為陣列長度 rerurn 0 陣列a中不存在key 複雜度...