前端了解的一些演算法 JS實現
阿新 • • 發佈:2018-11-29
作為一個前端新手,我覺得還是要懂一些演算法,所以參考了別的大神的文章,稍微總結了幾個比較常用的演算法。
排序演算法:
簡單排序:
1)氣泡排序
氣泡排序分為三個主要步驟:
一、比較相臨兩個數,若前一個比後一個大,就調換位置
二、第一輪過後,最右邊的是最大的數了,不用加入下一輪比較
三、重複步驟一
function blue( elements){ for( var i= 0; i2)選擇排序
快速排序的含義:先找到最大(最小)的數,放在序列起始位置,然後繼續找剩下的數中最大(最小)的數,依次放在序列中
以此類推,直到數都迴圈完畢
3)插入排序
1)第一個元素預設已經排序
2)取下一個元素,從序列中部向後開始比較,若元素大於已排序元素,則向後移到下一位置作比較
3)直至找到一個位置,已排序元素小於等於新元素,將元素插入到下一位置中
4)重複步驟2
高階排序:
1)希爾排序
2)歸併排序
3)快速排序
查詢演算法:
1)順序查詢
遍歷整個陣列,如果與查詢值相同就返回true
function shunxusearch( arr, val){ for ( let index = 0; index < arr. length; index++) { if ( arr[ index]== val) { return true; } } return false; } var arr=[ 22, 55, 66, 9, 8, 7, 4, 11, 2, 6]; console. log( shunxusearch( arr, 666));2)二分查詢
一、先找到中間值,通過與中間值比較,小的放左邊,大的放右邊
二、再在兩邊取中間值,小的放左邊,大的放右邊
三、以此類推
分為遞迴與非遞迴
var arr=[ 1, 22, 33, 45, 55, 66, 78, 89, 97]; //遞迴 function binary1( arr, low, high, data){ var mid= parseInt(( high+ low)/ 2); if( arr[ mid]== data){ return mid; } else if( arr[ mid]> data){ high= mid- 1; return binary1( arr, low, high, data); } else if( data> arr[ mid]){ low= mid+ 1; return binary1( arr, low, high, data); } } console. log( binary1( arr, 0, 8, 45)); //非遞迴 function binary2( arr, data){ var low= 0, high= arr. length- 1; while( low<= high){ var mid= parseInt(( high+ low)/ 2); if ( arr[ mid]== data) { return mid; } else if( data> arr[ mid]){ low= mid+ 1; } else if( data< arr[ mid]){ high= mid- 1; } else{ return - 1; } } } console. log( binary2( arr, 45));高階演算法:
1)動態規劃
2)貪心演算法