雖然前端面試中不多會考到算法類的題目,可是你去大廠面試的時候就知道了,對基本算法的掌握對於從事計算機科學技術的咱們來講,仍是必不可少的,天天花上 10 分鐘,瞭解一下基本算法概念以及前端的實現方式。前端
另外,掌握了一些基本的算法實現,對於咱們平常開發來講,也是如虎添翼,能讓咱們的 js 業務邏輯更趨高效和流暢。面試
冒泡排序很簡單,就是數組中的相鄰元素,兩兩比較,數值或者 Unicode
碼小的元素往前排。算法
具體實現指導以下:數組
var bubbleSort = function (arr){
var i, j, m;
var len = arr.length;
if (len <= 1) {
return arr;
}
for (i=0; i<len-1; i++) {
for (j=0; j<len-i-1; j++) {
if (arr[j] > arr[j+1]) {
m = arr[j];
arr[j] = arr[j+1];
arr[j+1] = m;
}
}
}
return arr;
};
複製代碼
若是數組本來的順序就是冒泡的,又或者僅作完前面寥寥幾回就已經達到效果了,那後續的比較工做就顯得有些多餘了,如何對以上算法進行改進?微信
咱們能夠在某一輪的循環比較結束後,若是沒有發生任何的元素交換,則能夠認爲該數組已經達到預期效果,沒必要再繼續下一輪的比較了。ui
var bubbleSort = function (arr){
var start = +new Date();
var i, j, m, noswap;
var len = arr.length;
if (len <= 1) {
return arr;
}
for (i=0; i<len-1; i++) {
noswap = true;
for (j=0; j<len-i-1; j++) {
if (arr[j] > arr[j+1]) {
m = arr[j];
arr[j] = arr[j+1];
arr[j+1] = m;
noswap = false;
}
}
if (noswap) {
break;
}
}
// 當 arr 的長度越長,時間差越明顯
console.log(+new Date() - start);
return arr;
};
複製代碼
分析時間複雜度就按最壞的狀況來,即待排序表是徹底逆序的狀況。 假設數組中共有 n
個元素,第一輪須要比較 n-1
次,第二輪須要比較 n-2
次,第三輪須要比較 n-3
次,以此類推,最後一輪須要比較 1
次,共比較 n-1
輪,因此是個等差數列,運用等差數列求和公式,能計算出以下時間複雜度: spa
所以總的時間複雜度爲 O(n²)
。3d
以爲本文不錯的話,分享一下給小夥伴吧~ code