資訊工程 - 演算法與資料結構 - 資料結構 - 搜尋演算法(Search Algorithm)

上一篇:資訊工程 - 演算法與資料結構 - 資料結構 - 時間複雜度(Time Complexity)


線性搜索(Linear Search)

這是最簡單的搜索方法,原理就是給你一堆數字,你要找某個數的話,直接按順序一個一個找。

寫法的話,有3個形參,分別是 陣列,陣列的大小,值。

你需要寫一個最簡單的for循環和if進行判斷。

代碼:

int linear_search(int nums[],int n,int val)

{

int i;

for(i=0;i<n;i++)

if(nums[i]==val)

return i;

return -1;

}


二分搜尋(Binary Search)

這個,必須是用排列好的數據,再進行二分探索。(最好是從小到大排列)

不管你是用遞歸還是循環,本質是不變的。


使用遞迴函數的二分搜尋演算法:

int _binary_search(int nums[],int l,int r,int x)

{

if(r>=l)

{

int mid=(l+r)/2;


if(nums[mid]==x)

return mid;

else if(nums[mid]>x)

return _binary_search(nums,l,mid-l,x);

else

return _binary_search(nums,mid+1,r,x);

}

return -1;

}


int binary_search(int nums[], int n, int x)

{

return _binary_search(nums,0,n-1,x);

}


使用循環的二分搜尋演算法:

int binary_search(int nums[],int n,int x)

{

int l=0,r=n-1;

while(l<=r)

{

int mid=(l+r)/2;


if(nums[mid]==x)

return mid;

else if(nums[mid]>x)

r=mid-1;

else 

l=mid+1;

}

return -1;

}


使用特殊資料構造的探尋演算法

二分搜尋法是基於排序完畢的數列進行的。下一張將介紹二元搜尋樹和資料結構。

二元搜尋樹,用O(log(n))的計算量能探索。接下來將介紹如何用Hash table以O(1)的計算量的探索。


下一篇:資訊工程 - 演算法與資料結構 - 資料結構 - 鏈結串列(Linked List)

目錄:資訊工程 - 演算法與資料結構  -  Algorithm&Data Struncture(目錄)

留言

這個網誌中的熱門文章

【TOEIC】多益復習800分的準備 - 第2天(從600分進步到800分計劃)

資訊工程 - 演算法與資料結構 - 資料結構 - 堆疊和佇列 - (Stack&Queue)

微積分 - 求不定積分 $$\int \:tanxdx$$ Integral of tan x dx