一些簡單的演算法

2021-09-02 23:17:15 字數 2839 閱讀 1822

氣泡排序,比如你有五個數  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,屬於穩定排序的一種,然而,氣泡排序由於時間複雜度比較高,所以往往並不是最優演算法,然而,它有乙...