( 译文 ) JavaScript中算法和数据结构

javascript/jquery

浏览数:140

2019-3-9

请各位读者添加一下作者的微信公众号,以后有新的文章,将在微信公众号直接推送给各位,非常感谢。


0. 前言

今天一直在整理关于面试的内容,希望能够让我的兄弟姐妹们在未来能够有所借鉴。

在整理的时候,发现有一位歪果友人写的文章非常6,所以趁机翻译一下,分享给大家。

译文的原文如下:

Algorithms and data structures in JavaScript

1.正文

在今天的文章中会是一个非常重要的主题,即:在JavaScript中算法和数据结构。这是编程的一个重要话题。我们不应该有偏见——Javascript很适合这一目的。也许有些事情将在解说语言有点困难,但是别人会简化,例如基本堆栈实现(FIFO)。

1.1 Factorial(阶乘)

在开始一个典型的例子——阶乘和递归。

示例——计算阶乘JavaScript:

function factorial(n) {
    if (n == 0)
        return 1;
    else
        return (n * factorial(n-1));
}
 
alert(factorial(5));

1.2 Leap year(闰年)

下一个算法是检查是否某一年是一个闰年。

// is leap year - JavaScript
function checkLeapYear(year) {
    if ( ((year % 4 == 0) 
          && 
          (year % 100 != 0)) || (year % 400 == 0) ) {
        alert(year + ' is leap');
         
        return true;
    } else {
        alert(year + ' is NOT leap');
         
        return false;
    }
}
 
alert(checkLeapYear(2012));
alert(checkLeapYear(2013));

1.3 Min-Max algorithm(Min-Max算法)

所以确定最低和最高的给定值。

示例——在JavaScript min-max算法的实现:

var tab = new Array(16, 9, 86, 48, 59, 2, 78, 240, 18);
// default
var min = tab[0];
var max = tab[0];
 
for (var i = 0; i < tab.length; i++) {
     
    if (min > tab[i]) {
        min = tab[i];
    }
   
    if (max < tab[i]) {
        max = tab[i];
    }
}
 
alert("Min = " + min + ", Max = " + max);

这是一个简单,但有效实施基于数组中元素之间的比较。

1.4 Random string(随机字符串)

这个算法是一个简单的发生器的随机字符串。

var _list = "abcdefghijklmnopqrstuvwxyz9876543210"; 
 
function randomStringGenerator(how_long) {
    var tmp = '', i = 0;
    var list_len = _list.length;
     
    for (i = 0; i < how_long; i++) {
        tmp += _list.charAt(Math.floor(Math.random() * list_len));
    }
   
    return tmp;
}
 
alert(randomStringGenerator(8));

实现基于输入的字符列表(它可以是任何调整)。

1.5 Binary search(二分查找)

基于“分而治之”,二叉搜索一个简单但最优方法找到价值甚至在大输入列表。

在JavaScript的例子——二进制搜索:

inputList = new Array();
inputList[0] = 'E';
inputList[1] = 'I';
inputList[2] = 'O';
inputList[3] = 'P';
inputList[4] = 'Q';
inputList[5] = 'R';
inputList[6] = 'T';
inputList[7] = 'U';
inputList[8] = 'W';
inputList[9] = 'Y';
 
function binarySearch(inputList, key) {
    var left = 0;
    var right = inputList.length - 1;
   
    while (left <= right) {
        var mid = parseInt((left + right) / 2);
         
        if (inputList[mid] == key)
            return mid;
        else if (inputList[mid] < key)
            left = mid + 1;
        else
            right = mid - 1;
    }
   
    return 'Not found';
}
 
alert(binarySearch(inputList, 'T'));
alert(binarySearch(inputList, 'Z')); // Not found

参见:计算复杂性