前端也要懂演算法,閱《演算法**》有所得。1. 記憶體的原理:
相信我們經常會聽到「堆」、「棧」之類的字眼,那麼計算機的記憶體是什麼呢?當我們去游泳時,我們需要將東西存在保險櫃裡,可能東西比較多,乙個放不下,這時候就需要申請2個保險櫃,再將東西放在櫃子裡,手裡拿著開櫃的鑰匙。
計算機的記憶體分配亦是如此,當我們需要使用記憶體時,我們需要申請空閒記憶體,再將資料存入申請的記憶體裡,最終得到存放資料的記憶體位址。如果我們需要訪問乙個資料,只需要知道資料存放的位址,就能訪問。
2. 陣列與鍊錶
陣列和鍊錶是計算機最基礎的2種資料結構。假如我們需要將5個資料放入記憶體中,那麼計算機需要分給我們5個記憶體空間,那麼使用陣列和鍊錶的區別是什麼呢?
1)陣列
如果使用陣列儲存,那麼我們需要計算機分配5個相鄰的記憶體空間,因為陣列的每個元素都是有序且相鄰的。此時,我們很容易發現,如果我需要往陣列裡插入乙個元素,那麼我們可能會面臨如下困境:
如果使用鍊錶來儲存,以上問題將會迎刃而解。
2)鍊錶
同樣,以鍊錶的形式儲存5個元素,每個元素都記錄著下乙個元素的位址,那麼只需要知道乙個元素,就能得到整個鍊錶,而不需要每個元素都相鄰。
這樣我們插入乙個新元素,只需要改變上乙個元素記錄的位址。
當然,事情不會這麼簡單,陣列與鍊錶各有優劣。
3)優劣
陣列 鍊錶
查詢 o(1) o(n)
插入 o(n) o(1)
刪除 o(n) o(1)
顯而意見,陣列在查詢操作上的效能較高,因為陣列的每個元素都是相鄰的,從而支援隨機查詢,即如果知道了第乙個元素,那麼第4個元素的位置也能猜到。相反,鍊錶儲存的資料則需要從頭開始查詢,因為只有前乙個元素才知道後乙個元素的位置。
同理: 對於插入和刪除, 鍊錶只需要修改上乙個元素的位址,而陣列如果插入的資料是中間的,則需要對後面所有的元素進行補位。
由此,很容易得出結論:
1. 原理
選擇排序的思想是,如果有一組資料需要從大到小排序,那麼先找出最大的,移除,再在剩下的數中找第二大的,依次類推。其演算法速度:o(n^2)
2. js實現
function selectionsort(myarray)
}// 如果當前位置不是最小值,將其換為最小值
if (i != min)
}return myarray;
}function swap(myarray, p1, p2)
演算法基礎 陣列 鍊錶 選擇排序
1 說說記憶體的工作原理?1 記憶體 就像很多抽屜的集合體,每個抽屜都有位址,fe0ffeeb是乙個記憶體單元的位址 2 將資料儲存到記憶體時,請求計算機提供空間,計算機給你乙個儲存位址。需要儲存多項資料時,有兩種儲存方式 陣列 鍊錶。2 說說陣列的原理?4個人去看電影,以陣列的形式將4個人儲存在座...
演算法2 鍊錶,陣列,和選擇排序
計算機的記憶體就像是我們平時存放東西的儲物櫃一樣,我們把揹包之類的物品放入櫃子裡,每個櫃子有乙個專屬的編號,我們記住這個編號,然後根據編號就可以找到櫃子拿回屬於我們的物體。在計算機裡,就有很多這種櫃子,叫記憶體單元,每個櫃子的編號就是位址。那麼如何將資料存放到相應的位址內呢,有兩種基本方式,鍊錶和陣...
演算法講解 選擇排序 陣列鍊錶
陣列 使用陣列儲存item意味著所有item在記憶體中都是相連的。在陣列中儲存新的item可能很麻煩,because if 沒有了新空間,就得移動到記憶體的其他地方,因此新增新元素會很慢。陣列刪除元素也很麻煩,刪除元素後,必須將後面的元素前移。結決辦法1 預留空間。缺點 1 額外請求的位置可能用不上...