淺解前端必須掌握的演算法(一) 氣泡排序

2021-09-20 08:24:08 字數 1131 閱讀 1850

雖然前端面試中很少會考到演算法類的題目,但是你去大廠面試的時候就知道了,對基本演算法的掌握對於從事計算機科學技術的我們來說,還是必不可少的,每天花上 10 分鐘,了解一下基本演算法概念以及前端的實現方式。

另外,掌握了一些基本的演算法實現,對於我們日常開發來說,也是如虎添翼,能讓我們的 js 業務邏輯更趨高效和流暢。

氣泡排序很簡單,就是陣列中的相鄰元素,兩兩比較,數值或者unicode碼小的元素往前排。

具體實現指導如下:

比較相鄰兩個元素,若前乙個比後乙個大,則交換位置;

第一輪結束之後,最後乙個元素的值是最大的;

接著開始第二輪,但是不用再比較最後乙個元素了;

第一輪除外,以後的每一輪都比前一輪少比較一次;

var bubblesort = function (arr)

for (i=0; i-1; i++)

}} return arr;

};複製**

如果陣列原本的順序就是冒泡的,又或者僅做完前面寥寥幾次就已經達到效果了,那後續的比較工作就顯得有些多餘了,如何對以上演算法進行改進?

我們可以在某一輪的迴圈比較結束後,如果沒有發生任何的元素交換,則可以認為該陣列已經達到預期效果,不必再繼續下一輪的比較了。

var bubblesort = function (arr)

for (i=0; i-1; i++)

}if (noswap)

} // 當 arr 的長度越長,時間差越明顯

console.log(+new

date() - start);

return arr;

};複製**

分析時間複雜度就按最壞的情況來,即待排序表是完全逆序的情況。 假設陣列中共有n個元素,第一輪需要比較n-1次,第二輪需要比較n-2次,第三輪需要比較n-3次,以此類推,最後一輪需要比較1次,共比較n-1輪,所以是個等差數列,運用等差數列求和公式,能計算出如下時間複雜度:

因此總的時間複雜度為o(n²)

淺解前端必須掌握的演算法(五) 堆排序(上)

另外,掌握了一些基本的演算法實現,對於我們日常開發來說,也是如虎添翼,能讓我們的 js 業務邏輯更趨高效和流暢。今天這個演算法稍微比較複雜,牽扯到的概念也比較多,需要先了解基礎知識。我給每篇文章的定位是 10 分鐘內應該要掌握下來,所以我就擅作主張地將堆排序演算法講解分割為上 下兩篇文章了,希望能讓...

必須掌握的常用演算法之一

瑞士計算機科學家尼克勞斯.沃思提出了乙個著名的公式 資料結構 演算法 程式。從此公式可以看出,演算法是構成程式的乙個重要組成部分,而所謂的演算法 可以理解為解決某一確定問題所採用的具體步驟和方法。那麼作為程式開發者,就必須掌握一些常見演算法,之前幾篇部落格提到了排序,這裡來個收尾,給大家分享下較為經...

前端必須掌握的 docker 技能 2

作為乙個前端,我覺得必須要學會使用 docker 幹下面幾件事 部署前端應用 部署 nginx 給部署的 nginx 加上 https 使用 docker compose 進行部署 給 nginx 加上 redis 使用 kubernetes 下面我按照這個節奏一一研究一遍,把心得記錄下來,供以後開...