1. 程式人生 > 其它 >Stack棧詳解 圖解 引入到LinkedList和Array實現、均攤時間分析| Stack ADT details, intro to implementation and amortized time analysis with figures.

Stack棧詳解 圖解 引入到LinkedList和Array實現、均攤時間分析| Stack ADT details, intro to implementation and amortized time analysis with figures.

順序搜尋

*遍歷陣列

*找到跟目標值相等的元素,就返回它的下標

*遍歷結束後,如果沒有搜尋到目標值,就返回-1

時間複雜度

*遍歷陣列是一個迴圈

*時間複雜度:O(n)

Array.prototype.sequentialSearch=function (item){
    for(let i =0;i<this.length;i++){
        if(this[i]===item){
            return i
        }
    }
}

二分搜尋

*從陣列的中間元素開始,如果中間元素正好是目標值,則搜尋結束

*如果目標值大於或者小於中間元素,則 在大於或小於中間元素的那一半陣列中搜索

時間複雜度

*每一次比較都使得搜尋範圍縮小一半

*時間複雜度O(logN)

Array.prototype.binarySearch=function (item){
   //前提是有序
    let low =0
    let high = this.length-1
    while (low<=high){
        const mid =Math.floor((low+high)/2)
        const  element =this[mid]
        if(element<item){//中間元素比目標值小,low就應該取mid上一個
            low=mid +1
}else if(element >item){//中間元素比目標值大,high就應該取mid下一個 high = mid -1 }else { return mid } } return -1 }