javascript數據結構與算法——搜索算法

前言

本書當中說了兩種搜索算法,篇幅都不大,由於融合了以前的知識點,因此看起來會相對簡單一,主要包括兩個內容:算法

  • 順序搜索
  • 二分搜索

順序搜索

  從字面的意思來看,就是按照順序一個一個找下去的意思,直到找到爲止。搜索的結果能夠返回true、當前索引、當前值,不然返回false,-1,null等內容,咱們看以下一段代碼:數組

var sequentialSearch = function(item){
        for (var i = 0;i<array.length; i++){
            if(item === array[i]){
                return i; //返回索引
                // return true;  返回布爾
                // return array[i];  返回當前值
            }else{
                return -1;
            }
        }
    }

  總體的思路就是遍歷數據,而後把遍歷到的每項內容,跟咱們要查找的元素相比較,若是值相等就遍歷結束,使用 return 返回,不然在遍歷結束的時候返回其它內容。
假定有以下數組,咱們要在裏面查找值爲3的元素項:數據結構

[5,4,3,2,1]

搜索的示意圖以下:ui

1

二分搜索

  所謂的二分,就是把數據一分爲二,首先選中一箇中間值,若是中間值是須要查找的,那麼返回該值,不然拿須要查找的值跟這個中間值比較,而後依次循環執行這個步驟,直到找到爲止。spa

該搜索算法要求被搜索的數據結構已排序。
  • 選擇數組的中間值
  • 若是中間值是待搜索值,那麼算法執行結束
  • 若是待搜索的值比中間值小,則返回第一步,在選中值得左邊尋找
  • 若是待搜索的值比中間值大,則返回第二步,在選中值得右邊尋找

代碼實現:code

let binarySearch = function(item){
        // 由於要求先排序
        quickSort(array);
        
        let low = 0,
            hight = array.length - 1,
            mid,element;
        
        while (low <= high){
            mid = Math.floor((low + high) / 2);
            element = array[mid];
            if(element < item){
                low = mid + 1;
            }else if(element>item){
                high = mid - 1;
            }else{
                return mid;
            }
        }
        return -1;
    }

一下是算法執行的步驟示例圖:排序

1

這裏的內容大部分是書中摘抄的內容,中間說到了快速排序,您能夠查閱其它的資料去了解下,排序算法相關的內容,JS常見的排序算法主要有,固然咱們這裏也能夠使用其它排序方法,好比:冒泡排序、選擇排序、插入排序、歸併排序等。索引

相關文章
相關標籤/搜索