close
已排序完的1D陣列資料LabVIEW已有很好的搜尋元件可用,用Search 1D Array元件可快速搜尋到資料索引位置,10萬筆資料的搜尋瞬間完成
但這次題目要求是不使用這類搜尋元件,用其他方式去搜尋這10萬筆資料
原先完成的做法是用順序搜尋法,從陣列資料的第1筆資料開始搜尋,直到找到目標或搜尋完整個陣列為止
這樣做有個問題,資料位在陣列的尾端時要搜尋很久,若沒有符合的資料時更要把10萬筆資料全搜尋過才會停止,以搜尋程式來說很沒有效率
這時想到的是以前寫VB程式用的二叉式搜尋法,再來是如何用LabVIEW來完成同樣的程式
首先用迴圈定出要搜尋索引值的上下限範圍,初始值上限是陣列最後一筆資料的索引值,下限是第一筆也就是索引值為0的資料
再來就是算出中間索引值的號碼,公式是(上限減下限除以2再加上下限),以算出的索引值從資料來源陣列中取出值和搜尋值比對,若資料相同則表示已搜尋到目標,直接停止迴圈完成搜尋
若上限減下限除以2之後的商數為0,則表示已搜尋完全部陣列,此時也停止迴圈完成搜尋
若搜尋值大於比對值,則把上一步算出的中間索引值改為下限,只搜尋陣列資料的後半段
若搜尋值小於比對值,則把上一步算出的中間索引值改為上限,只搜尋陣列資料的前半段
最後完成的程式不管是否有符合的資料,最多只要搜尋17次即可完成10萬筆資料的搜尋,和順序搜尋法相比是很有效率的程式
文章標籤
全站熱搜
留言列表