【Scratch】循序搜尋法

之前我們練習了許多清單應用,而清單本身就是用來儲存一系列相關資料的變數記憶空間,當資料被逐一存進去之後,到底裡面有沒有我們想要的資料項目,就是一個搜尋資料的議題。如果資料的項目不多的話,一個一個比對並搜尋的速度是可以接受的,但是如果資料一多的話,逐一比對就變得很沒有效率。不過,在考慮效能的問題之前,先讓我們來看看,要如何從清單中找出我們想要的資料項目。

程式的一開始當然是先準備好一個要被查詢資料的清單,因此我們需要定義一個清單變數,而在搜尋的過程中需要知道目前是查到了哪一個,所以還需要一個變數,同時,如果找到了,也要知道是否找到了,因此在這個範例中,我們建立了三個變數,分別是data , i, found,如下所示:

程式一開始時當然要先建立一個清單的資料內容,才有可以尋找資料項目的對象。在這裡我們使用隨機數去任意新增20個資料項目,程式如下:

有了這一段程式積木,當程式開始執行之後,就會在舞台區呈現出如下所示的畫面:

然後,在貓咪被按下去之後,首先要詢問想要查詢的數字,接著就透過一個迴圈逐一把每一個元素資料都拿出來比對,如果是想要找的,就讓貓咪說出找到了,以及是在第幾個項目中找到的,同時也要把found這個變數設定為1。最後,在迴圈結束之後就可以比對found的內容,如果found都還是0的話,就要告訴使用者,資料項目並不在清單中。以下就是搜尋的程式碼:

不過依照上面的方法,同學們在執行之後如果仔細觀察就會發現,因為它的迴圈次數是固定的,所以就算是在迴圈還沒結束之前就找到資料項目,它仍然會持續地執行剩下的尋找動作,這樣子的設計當然就非常沒有效率。為了改善此種情形,底下使用的是另外一種迴圈的方式,也就是條件式迴圈。它的重複次數是由每一次開始重複時的條件檢查動作來決定的,如果條件成立就不再重複,不成立時就繼續這一遍的執行,程式積木如下:

如上面的程式積木所示,我們設定了兩個結束的條件,其中之一是index的內容,也就是不要比較超過清單的項目數量,另外一個就是found變數,用來記錄是否在上一次執行時有找到想要的資料。因為是使用「或」,因此只要任一條件成立,此迴圈就不再重複執行。這樣的修改,就可以解決之前提到的多餘比較次數的問題了。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *