前端常用算法

沒(méi)錯(cuò),作為一個(gè)菜鳥(niǎo),我真的不認(rèn)為前端需要用到算法。
我不是朝后段喊一聲,什么都有了么???(黑人問(wèn)號(hào))
然而實(shí)際上,前端還是有一些常用算法的,而且有很多很簡(jiǎn)單的算法或者實(shí)現(xiàn)方法,我從未將其作為一個(gè)算法來(lái)理解,更不用說(shuō)理解成前端算法。

排序算法

  1. 冒泡:復(fù)雜度O(n2)

    function bubbleSort(arr){
       var i = 0,
            j = 0;
       for(i=1; i<arr.length; i++){
       for(j=0; j<=arr.length-i; j++){
       var temp = 0;
       // ">" 從小到大排序
       // "<" 從大到小排序
       if(arr[j] > arr[j+1]){
           temp = arr[j];
           arr[j] = arr[j+1];
           arr[j+1] = temp;
         }
       }
       }
       console.log(arr);
       return arr;
    
     }
    
     (function main() {
        var arr = [3,0,9,100,3];
        arr = bubbleSort(arr);
     }());
    
  2. 快速排序:復(fù)雜度 O(n2) or O(nlog2n)

// 每次選擇最左邊的數(shù)作為基數(shù)

function quickSort(arr){
  if (arr.length<2) { return arr; }
  // 定義左指針
  var left=0;
  // 定義右指針
  var right=arr.length-1;
  //開(kāi)啟每一輪的排序
  while(left<right){
    // 尋找右邊比arr[0]小的數(shù)的下標(biāo)
    while(arr[right]>=arr[0] && left<right){
      right=right-1;
    }
    // 尋找左邊比arr[0]大的數(shù)的下標(biāo)
    while(arr[left]<=arr[0] && left<right){
      left++;
    }
    //當(dāng)左邊指針與右邊指針相遇后,交換arr[0]與當(dāng)前兩個(gè)指針?biāo)诘脑?    if (right==left) {
      let mid=arr[right];
      arr[right]=arr[0];
      arr[0]=mid;
      break;
    }
    // 當(dāng)左指針小于右指針的位置,交換兩個(gè)指針當(dāng)前位置的元素
    let tem=arr[right];
    arr[right]=arr[left];
    arr[left]=tem;
  }
  //遞歸實(shí)現(xiàn)
  return quickSort(arr.slice(0,left)).concat(arr.slice(left,right+1)).concat(quickSort(arr.slice(right+1)));
}
  1. 有序數(shù)組合并

     function merge(left, right) {
       var result = [],
       il = 0,
       ir = 0;
    
       while (il < left.length && ir < right.length) {
         if (left[il] < right[ir]) {
           result.push(left[il++]);
         } else {
           result.push(right[ir++]);
         }
       }
       while(left[il]){
         result.push(left[il++]);
       }
       while(right[ir]){
         result.push(right[ir++]);
       }
       return result;
    }
    

字符處理

  1. 生成隨機(jī)驗(yàn)證

     function bubbleSort(n){
       var str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
       var tmp = '';
       for(var i=0;i<n;i++)
          tmp += str.charAt(Math.round(Math.random()*str.length));
    
       console.log(tmp);
       return tmp;
     }
    
  • charAt() 方法可返回指定位置的字符。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 最近在梳理知識(shí)結(jié)構(gòu),在復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的時(shí)候仔細(xì)理了一遍。由于內(nèi)容比較多,現(xiàn)在整理的是基礎(chǔ)的內(nèi)容: 排序和...
    臨水照影233閱讀 686評(píng)論 0 0
  • 排序算法 1、冒泡排序 function bubbleSort(arr){ var i = j = 0; fo...
    LaBaby_閱讀 274評(píng)論 0 1
  • 排序算法說(shuō)明 (1)排序的定義:對(duì)一序列對(duì)象根據(jù)某個(gè)關(guān)鍵字進(jìn)行排序; 輸入:n個(gè)數(shù):a1,a2,a3,…,an 輸...
    code武閱讀 743評(píng)論 0 0
  • 人類在一次次的追問(wèn)中成長(zhǎng)進(jìn)步,在回答與否定中探索前行。也將在無(wú)限循環(huán)的問(wèn)與答中走向更文明的未來(lái)。 我們都見(jiàn)證過(guò)小孩...
    如意ylm閱讀 214評(píng)論 0 4

友情鏈接更多精彩內(nèi)容