js學習總結 常見的演算法

2022-07-12 23:27:20 字數 3342 閱讀 2930

一、遞迴 : 當前函式自己呼叫自己執行

實現1-100之間,把所有不能被三整除的數相加(這種型別的問題首先想到的是遞迴)

function

sum()

if(n % 3 ===0)

return n+sum(n-1)

}

從1-10把所有能被二整除的進行相乘  

function

fn(n)

if(n%2!==0)

return n*fn(n-1);

}

使用settimeout實現乙個和setinterval一模一樣的功能

二、氣泡排序

氣泡排序的思想:讓當前項和後一項進行比較,如果當前項大於後一項,兩者交換位置

例如:

var ary = [4,3,5,2,1]

第一輪:

拿出陣列第一項4和後一項3比較 4>3 交換位置  [3,4,5,2,1]

4<5 不需要交換位置[3,4,5,2,1]

5>2 交換位置 [3,4,2,5,1]

5>1 交換位置 [3,4,2,1,5] //雖然沒有實現最終的目標 但是已經把陣列的最大值放在了末尾位置了

第一輪比較四次 一共五個數 不用和自己比 最多比較四次

第二輪

3<4 不交換[3,4,2,1,5]

4>2 交換 [3,2,4,1,5]

4>1 交換 [3,2,1,4,5] //也沒有實現最後的目標 但是把剩餘項中的最大的4放在了倒數第二位

第二輪比較三次

第三輪

3>2 交換 [2,3,1,4,5]

3>1 交換 [2,1,3,4,5]

第三輪比較二次

第四輪

2>1 交換 [1,2,3,4,5]

每一輪當前項和後一項兩兩比較的話,雖然不一定達到最後的結果 但是已經把當前最大的那個值放在了後面,陣列一共有五項,只需要比較四輪,把四個最大值分別放在末尾 就實現了排序  一共最多需要比較輪:ary.length-1

i輪數 i = 0 ij每一輪比較的次數

i = 0 第一輪 4

i = 1 第二輪 3

i = 2 第三輪 2

i = 3 第四輪 1(ary.length-1-i)

兩者交換位置

var a = 12;

var b = 13;

var c = null;

c = a;

a = b;

b = c

如果不能使用第三個瓶子如何處理

var a = 12;

var b = 13;

a = a+b;

b = a-b;

a = a-b;

冒泡函式

function

bubblesort(ary)

}if(flag)else

}return

ary;

}

三、快速排序

var ary = [12,13,23,14,20,26,34,13,16]

快速排序的思想:

1、我們首先在陣列中找乙個「基準點」(一般把基準點選擇為陣列中間的這一項)

math.floor(ary.length/2)

2、拿基準點和陣列中的其他項進行比較,比基準點小的放在左邊,比基準點大的放在右邊

3、以後的每一遍都重複上述的兩個操作,直到當前這一邊只有一項的時候停止處理..

快排函式:

function

quicksort(ary)

var pointindex = math.floor(ary.length / 2);//

找到基準點的索引

//通過基準點的索引在原來的陣列中刪除這一項,並把基準點這一項的值獲取到

var pointvalue = ary.splice(pointindex,1)[0];

//拿基準點的值和原來的陣列中每一項進行比較,把小於基準點的放在左邊,大於基準點的放在右邊

var left =;

var right =;

for(var i = 0;i)

return

quicksort(left).concat([pointvalue],quicksort(right))

}

四、陣列插入排序

var ary = [6,3,5,7,2,4]

把第一張牌放在左手,以後拿到每一張牌的時候,和左手中的牌進行依次比較(一般來說我們的習慣是從後往前比較),如果當前的牌比倒數第一張小,在繼續往左比。。。一直遇到當前的牌已經比手裡的某張牌大了,則把這張牌插入到某張牌的後面(某張牌下一張的前面)

插入函式:

function

insertsort(ary)

}else}}

return

newary;

}

js的幾種常見的演算法排序總結

思想 比較相鄰的兩個元素的大小,順序如果相反的話則進行交換,這樣的話每次迴圈都可以將最小的或者最大的元素放到後面,最終達到排序的效果 可公升序可降序 實現var array 3 4,1 5,2 45,1 23 function bubblesort arr return arr console.lo...

常見的js演算法

一 快速排序演算法 1.1 先從數列中取出乙個數作為 基準 1.2 分割槽過程 將比這個 基準 大的數全放到 基準 的右邊,小於或等於 基準 的數全放到 基準 的左邊。1.3 再對左右區間重複第二步,直到各區間只有乙個數。實現 var quicksort function arr var pivot...

常見機器學習演算法總結

機器學習演算法主要分為以下2種 有監督與無監督。再細分可分為四種 分類,聚類,回歸,關聯四大類演算法。分類與回歸屬於有監督學習。聚類與關聯屬於無監督學習。分類演算法主要有knn,決策樹,樸素貝葉斯,svm,邏輯回歸,adaboost演算法。knn演算法 基於距離進行分類,選取前k個最相似的樣本,看這...