各類查找算法

1、順序查找算法

順序查找比較簡單,這裏就不用代碼實現了,其原理就是按順序比較每一個元素,直到找到關鍵字。數組

其時間複雜度爲O(n).spa

2、二分查找(折半查找)code

原理是:查找過程從數組的中間元素開始,若是中間元素正好是要查找的元素,則查找過程結束;blog

若是要查找的元素大於中間元素,則從數組大於中間元素的那一半查找;若是小於中間元素,則從小於中間元素的那一半查找;不然就是沒有找到。排序

時間複雜度爲O(logn).博客

代碼以下:class

 1 int binary_search(int *a,int len,int key)
 2 {
 3     int low=0 4     int high=len-1;
 5     while(low<=high)
 6     {
 7         int mid=(low+high)/2;
 8         if(a[mid]==key)
 9         {
10             return mid;
11         }
12         //在左邊找
13         else if(a[mid]>key)
14         {
15             high=mid-1;
16         }
17         //在右邊找
18         else if(a[mid]<key)
19         {
20             low=mid+1;
21         }
22         //沒找到該值
23         else 
24             return -1;
25     }
26 }

 

3、二叉排序樹查找原理


使用條件:先建立二叉排序樹:搜索

1.若它的左子樹不爲空,則左子樹上全部結點的值均小於它的根結點的值。

2.若它的右子樹不空,則右子樹上全部結點的值均大於它的根結點的值。

3.它的左、右子樹也分別爲二叉排序樹。

算法原理:

在二叉排序樹b中查找key的過程以下:

1.若b是空樹,則搜索失敗,不然:

2.若key等於b的根節點的數據域的值,則查找成功;不然

3.若key小於b的根節點的數據域的值,則查找左子樹;不然

4.查找右子樹。

時間複雜度爲:O(log2(n)).

代碼將在下篇博客中實現。

相關文章
相關標籤/搜索