Heim > Web-Frontend > js-Tutorial > 常见的前端JS算法总结

常见的前端JS算法总结

零到壹度
Freigeben: 2018-04-12 11:57:59
Original
1820 Leute haben es durchsucht

本篇文章给大家分享的内容是常见的前端JS算法总结,有着一定的参考价值,有需要的朋友可以参考一下

排序算法

1、冒泡排序

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;
      }
    }
  }  return arr;
}
Nach dem Login kopieren

2、快速排序

function quickSort(arr,l,r){ 
 if(l < r){  
   var i = l, j = r, x = arr[i];    
   while(i<j){    
     while(i<j && arr[j]>x)
        j--;      
      
      if(i<j)        
      //这里用i++,被换过来的必然比x小,赋值后直接让i自加,不用再比较,可以提高效率
        arr[i++] = arr[j];      
      
      while(i<j && arr[i]<x)
        i++;      
      
      if(i<j)        
        //这里用j--,被换过来的必然比x大,赋值后直接让j自减,不用再比较,可以提高效率
        arr[j--] = arr[i];
    }
    arr[i] = x;
    
    quickSort(arr, l, i-1);
    quickSort(arr, i+1, r);
  }
}
Nach dem Login kopieren

3、二路归并

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;
}
Nach dem Login kopieren

字符串操作

1、判断回文字符串

function palindrome(str){ 
 // \W匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
  var re = /[\W_]/g;  
  // 将字符串变成小写字符,并干掉除字母数字外的字符
  var lowRegStr = str.toLowerCase().replace(re,&#39;&#39;);  
  // 如果字符串lowRegStr的length长度为0时,字符串即是palindrome
  if(lowRegStr.length===0) return true;  
  // 如果字符串的第一个和最后一个字符不相同,那么字符串就不是palindrome
  if(lowRegStr[0]!=lowRegStr[lowRegStr.length-1]) return false;  
  //递归
  return palindrome(lowRegStr.slice(1,lowRegStr.length-1));
}
Nach dem Login kopieren

2、翻转字符串

思路一:反向遍历字符串

function reverseString(str){
  var tmp = &#39;&#39;;  
  for(var i=str.length-1; i>=0; i--)
    tmp += str[i];  return tmp
}
Nach dem Login kopieren

思路二:转化成array操作

function reverseString(str){
  var arr = str.split("");  
  var i = 0,j = arr.length-1;  while(i<j){
    tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
    i++;
    j--;
  }  
  return arr.join("");
}
Nach dem Login kopieren

3、生成指定长度随机字符串

function randomString(n){
  var str = &#39;abcdefghijklmnopqrstuvwxyz0123456789&#39;;  
  var tmp = &#39;&#39;;  
  for(var i=0; i<n; i++) {
    tmp += str.charAt(Math.round(Math.random()*str.length));
  }  
  return tmp;
}
Nach dem Login kopieren

4、统计字符串中次数最多字母

function findMaxDuplicateChar(str) {
  if(str.length == 1) {  
    return str;
  }  
  var charObj = {};  
  for(var i = 0; i < str.length; i++) {  
    if(!charObj[str.charAt(i)]) {
      charObj[str.charAt(i)] = 1;
    } else {
      charObj[str.charAt(i)] += 1;
    }
  }  
  var maxChar = &#39;&#39;,
      maxValue = 1;  
  for(var k in charObj) {  
    if(charObj[k] >= maxValue) {
      maxChar = k;
      maxValue = charObj[k];
    }
  }  
  return maxChar + ':' + maxValue;
}
Nach dem Login kopieren

数组操作

1、数组去重

function unique(arr){
  var obj = {}  
  var result = []  
  for(var i in arr){  
    if(!obj[arr[i]]){
      obj[arr[i]] = true;
      result.push(arr[i]);
    }
  }  
  return result;
}
Nach dem Login kopieren

2、数组中最大差值

function getMaxProfit(arr){
  var min = arr[0],
      max = arr[0];  
  for(var i = 0; i < arr.length; i++){  
        if(arr[i] < min) min = arr[i];    
        if(arr[i] > max) max = arr[i];
  }  
  return max - min;
}
Nach dem Login kopieren

其他常见算法

1、阶乘

非递归实现

function factorialize(num) {
  var result = 1;    
  if(num < 0) return -1;    
  if(num == 0 || num == 1) return 1;    
  while(num>1) {
      result *= num--;
    }    
    return result;
}
Nach dem Login kopieren

递归实现

function factorialize(num) {
  var result = 1;  
  if(num < 0) return -1;  
  if(num == 0 || num == 1) return 1;  
  if(num > 1) return num*factorialize(num-1);
}
Nach dem Login kopieren

2、生成菲波那切数列

强行递归实现

function getfib(n){
  if(n == 0) return 0;  
  if(n == 1) return 1;  
  if(n > 1) return getfib(n-1) + getfib(n-2);
}
function fibo(len){
    var fibo = [];    
    for(var i = 0; i < len; i++){
      fibo.push(getfib(i));
    }    
    return fibo;
}
Nach dem Login kopieren

简约非递归实现

function getFibonacci(n) {
  var fibarr = [];  
  var i = 0;  
  while(i < n) { 
      if(i <= 1) {
      fibarr.push(i);
    } else {
      fibarr.push(fibarr[i - 1] + fibarr[i - 2])
    }
    i++;
  }  
  return fibarr;
}
Nach dem Login kopieren

3、二分查找

非递归实现

function binary_search(arr, key) {
  var low = 0,
      high = arr.length - 1;  
  while(low <= high){  
      var mid = parseInt((high + low) / 2);    
      if(key == arr[mid]){   
         return mid;
    }else if(key > arr[mid]){
      low = mid + 1;
    }else if(key < arr[mid]){
      high = mid -1;
    }
  }  
  return -1;
}
Nach dem Login kopieren

递归实现

function binary_search2(arr, low, high, key) {
  if(low > high) return -1;  
  var mid = parseInt((low + high)/2);  
  if(key == arr[mid]) { 
     return mid;
  } else if(key > arr[mid]) {  
    return binary_search2(arr, mid+1, high, key);
  } else if(key < arr[mid]) {  
    return binary_search2(arr, low, mid-1, key);
  }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt von常见的前端JS算法总结. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage