氣泡排序,比如你有五個數 3 4 2 1 0
其原理就是用沒個數和 其他數進行比較 下面我們來書寫每一輪的數值
第一輪:
3 < 4 > 2 得出佇列 2 4 3 1 0
2 < 1 < 0 得出佇列 1 4 3 2 0 得出佇列 0 4 3 2 1
第二輪
4 > 3 得出佇列 0 3 4 2 1
3 > 2 > 1 得出佇列 0 2 4 3 1 得出佇列 0 1 4 3 2
第三輪4 > 3 得出佇列 0 1 3 4 2
3 > 2 得出佇列 0 1 2 4 3
第四輪4 > 3 得出佇列 0 1 2 3 4
實現**
let arr = [3,4,2,1,0];
for(let i = 0;arr[i]!=undefined;i++)
}}console.log(arr); //[0,1,2,3,4]
已上**大大消耗了 cpu的效能
列入我們 有幾十萬個數 那電腦就可能要卡頓個幾秒了
接下來我們聊聊 高效能的快速排序9 6 3 7 5 2 1 0 8 4做例子
首先找個基準 找誰為基準都可以 然後和當前所有數列進行對比
首先我們要先定義兩個空陣列
let arr = [9,6,3,7,5,2,1,0,8,4];
function sort(arr)
sort(arr);
接下來我們衝數列中 找乙個基準 並把他衝陣列中移除
這裡說到的基準 其實就是 乙個參照數
let arr = [9,6,3,7,5,2,1,0,8,4];
function sort(arr)
sort(arr);
接下來遍歷數列 將大於基準值的丟進 left 小於基準值的丟進 right
let arr = [9,6,3,7,5,2,1,0,8,4];
function sort(arr)else
}}sort(arr);
最後我們還需要遞迴該數列 既然說了是遞迴,就要加乙個出口條件 否則會出現
too much recursion
let arr = [9,6,3,7,5,2,1,0,8,4];
function sort(arr)else
}return sort(left).concat(standard,sort(right)); //遞迴
}sort(arr);
還有就是常用的斐波那契數列
斐波那契數列就是前兩個數 的合等於第三個數
首先 先建立乙個空陣列
生成指定長度斐波那契數
let arr = ;
function fibonacci(index)
let item = fibonacci(10); //比如我們建立乙個長度為10的斐波那契數列
console.log(item);
首先判斷如果前兩個數 = undefined 那麼插入值為1否則插入計算結果
let arr = ;
function fibonacci(index)else
if(--index <= 0)return arr;//定義遞迴的出口
return fibonacci(index);
}let item = fibonacci(10); //比如我們建立乙個長度為10的斐波那契數列
console.log(item);
簡單的去重演算法
其實去重的原理就是 將不同的值丟進乙個空陣列中
上面說到空陣列 因此要建立兩個陣列 乙個記錄下標的值
function uniq(arr,arr1 = ,index = 0)
let arr = [2,2,9,5,3,9,5,2,4,3,3,1];
$item = uniq(arr);
console.log($item);
接下來就是判斷空陣列中是否有改值沒有就push進去 值到遍歷完arr後 返回arr1
function uniq(arr,arr1 = ,index = 0)
return uniq(arr,arr1,++index);
}let arr = [2,2,9,5,3,9,5,2,4,3,3,1];
$item = uniq(arr);
console.log($item);
簡單的會文演算法
在該例子中我會分別檢測asdsa 和 asdddsa 還有 aab 是否是回文 由於回文比較簡單我就不做過多解釋了
原理其實就是將值反轉一下判斷是否和原值相等 此處方法較多我子介紹那種在沒有js時類似於c語言的演算法
function iskaibun(str,str1 = "",index = str.length - 1)
console.log(iskaibun("asdsa")); //true
console.log(iskaibun("asdddsa")); //true
console.log(iskaibun("aab")); //false
一些比較簡單的演算法
今天被提起,發現很多細節,都是演算法啊,我居然以前都沒注意到,唉,笨人,多做點筆記為好 對於交換兩個數 既然是演算法,自認不能用乙個變數來當中介,這樣空間複雜度就相對高。通過算術運算交換 param a param b public void exchangetwonumbyarithmetic i...
一些排序演算法的簡單實現
排序演算法.cpp 定義控制台應用程式的入口點。include stdafx.h include include include includeusing namespace std const int maxnum 24 void vecprint vectorconst num cout end...
複習總結 一些簡單的排序演算法
1.氣泡排序,氣泡排序屬於簡單排序的一種,也是大多數人學會的第乙個排序演算法,其基本思想是,從左到右掃瞄每個資料,跟它相鄰的比較,如果大小順序不對,就交換兩個資料的位置,這種演算法的最壞時間複雜度為n 2,屬於穩定排序的一種,然而,氣泡排序由於時間複雜度比較高,所以往往並不是最優演算法,然而,它有乙...