( 譯文 ) JavaScript中算法和數(shù)據(jù)結(jié)構(gòu)

請(qǐng)各位讀者添加一下作者的微信公眾號(hào)珊擂,以后有新的文章射富,將在微信公眾號(hào)直接推送給各位矢门,非常感謝盆色。


0. 前言


今天一直在整理關(guān)于面試的內(nèi)容,希望能夠讓我的兄弟姐妹們?cè)谖磥?lái)能夠有所借鑒祟剔。

在整理的時(shí)候隔躲,發(fā)現(xiàn)有一位歪果友人寫(xiě)的文章非常6,所以趁機(jī)翻譯一下物延,分享給大家宣旱。

譯文的原文如下:

Algorithms and data structures in JavaScript

1.正文


在今天的文章中會(huì)是一個(gè)非常重要的主題,即:在JavaScript中算法和數(shù)據(jù)結(jié)構(gòu)。這是編程的一個(gè)重要話(huà)題叛薯。我們不應(yīng)該有偏見(jiàn)——Javascript很適合這一目的浑吟。也許有些事情將在解說(shuō)語(yǔ)言有點(diǎn)困難,但是別人會(huì)簡(jiǎn)化,例如基本堆棧實(shí)現(xiàn)(FIFO)。

1.1 Factorial(階乘)

在開(kāi)始一個(gè)典型的例子——階乘和遞歸耗溜。

示例——計(jì)算階乘JavaScript:

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

1.2 Leap year(閏年)

下一個(gè)算法是檢查是否某一年是一個(gè)閏年组力。

// 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算法的實(shí)現(xiàn):

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);

這是一個(gè)簡(jiǎn)單,但有效實(shí)施基于數(shù)組中元素之間的比較抖拴。

1.4 Random string(隨機(jī)字符串)

這個(gè)算法是一個(gè)簡(jiǎn)單的發(fā)生器的隨機(jī)字符串燎字。

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));

實(shí)現(xiàn)基于輸入的字符列表(它可以是任何調(diào)整)。

1.5 Binary search(二分查找)

基于“分而治之”,二叉搜索一個(gè)簡(jiǎn)單但最優(yōu)方法找到價(jià)值甚至在大輸入列表。

在JavaScript的例子——二進(jìn)制搜索:

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

參見(jiàn):計(jì)算復(fù)雜性轩触。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市家夺,隨后出現(xiàn)的幾起案子脱柱,更是在濱河造成了極大的恐慌,老刑警劉巖拉馋,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榨为,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡煌茴,警方通過(guò)查閱死者的電腦和手機(jī)随闺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蔓腐,“玉大人矩乐,你說(shuō)我怎么就攤上這事』芈郏” “怎么了散罕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)傀蓉。 經(jīng)常有香客問(wèn)我欧漱,道長(zhǎng),這世上最難降的妖魔是什么葬燎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任误甚,我火速辦了婚禮,結(jié)果婚禮上谱净,老公的妹妹穿的比我還像新娘窑邦。我一直安慰自己,他們只是感情好壕探,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布奕翔。 她就那樣靜靜地躺著,像睡著了一般浩蓉。 火紅的嫁衣襯著肌膚如雪派继。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天捻艳,我揣著相機(jī)與錄音驾窟,去河邊找鬼。 笑死认轨,一個(gè)胖子當(dāng)著我的面吹牛绅络,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼恩急,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杉畜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起衷恭,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤此叠,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后随珠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體灭袁,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年窗看,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茸歧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡显沈,死狀恐怖软瞎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拉讯,我是刑警寧澤铜涉,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站遂唧,受9級(jí)特大地震影響芙代,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盖彭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一纹烹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧召边,春花似錦铺呵、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至贞盯,卻和暖如春音念,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背躏敢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工闷愤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人件余。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓讥脐,卻偏偏與公主長(zhǎng)得像遭居,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旬渠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,212評(píng)論 0 4
  • 9.3.3 快速排序 ??快速排序?qū)⒃瓟?shù)組劃分為兩個(gè)子數(shù)組俱萍,第一個(gè)子數(shù)組中元素小于等于某個(gè)邊界值,第二個(gè)子數(shù)組中的...
    RichardJieChen閱讀 1,833評(píng)論 0 3
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理告丢,服務(wù)發(fā)現(xiàn)枪蘑,斷路器,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • LBSideslipCell 自定義tableViewCell側(cè)滑按鈕 自定義的UITableViewCell側(cè)滑...
    悲傷的蓋茨比閱讀 1,160評(píng)論 0 1
  • 在2015年3月6號(hào)進(jìn)入職場(chǎng)的喔芋齿,到現(xiàn)在為止已經(jīng)經(jīng)歷了644個(gè)日日夜夜,猶記得那年一過(guò)年就早早的出了老家...
    孤狼嘯月_閱讀 257評(píng)論 0 2