1. 程式人生 > >前端了解的一些演算法 JS實現

前端了解的一些演算法 JS實現

作為一個前端新手,我覺得還是要懂一些演算法,所以參考了別的大神的文章,稍微總結了幾個比較常用的演算法。

排序演算法:

簡單排序:

1)氣泡排序

    氣泡排序分為三個主要步驟:

    一、比較相臨兩個數,若前一個比後一個大,就調換位置

    二、第一輪過後,最右邊的是最大的數了,不用加入下一輪比較

    三、重複步驟一

function blue( elements){ for( var i= 0; i
< elements. length; i++){ for( var j= 0; j< elements. length- i- 1; j++){ if ( elements[ j]> elements[ j+ 1]) { var temp= elements[ j]; elements[ j]= elements[ j+ 1]; elements
[ j+ 1]= temp; } } } } var elements=[ 5, 5, 6, 9, 10, 52, 6, 9, 8, 47]; console. log( '冒泡前'+ elements); blue( elements); console. log( '冒泡後'+ elements);

2)選擇排序

    快速排序的含義:先找到最大(最小)的數,放在序列起始位置,然後繼續找剩下的數中最大(最小)的數,依次放在序列中

    以此類推,直到數都迴圈完畢

function quick( elements){ var minindex, temp; for ( var i = 0; i < elements. length- 1; i++) { minindex= i; for ( var j = i+ 1; j < elements. length; j++) { if ( elements[ j]< elements[ minindex]) { minindex= j; } } temp= elements[ i]; elements[ i]= elements[ minindex]; elements[ minindex]= temp; } return elements; } var elements=[ 3, 6, 9, 88, 45, 65, 1, 2, 65, 45, 11, 22]; console. log( quick( elements));

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)貪心演算法