JavaScript常見算法

1.簡單排序

let arr=[4,3,5,2,1,8,7,9,6];
arr.sort(function(a,b){
    return a-b;
});
console.log(arr);

2.冒泡排序

思想:讓當(dāng)前項(xiàng)和后一項(xiàng)比較,如果當(dāng)前項(xiàng)大于后一項(xiàng)敌厘,兩者交換位置

function bubbleSort(arr){
    for(let i=0;i<arr.length-1;i++){
        for(let j=0;j<arr.length-1-i;j++){
            if(arr[j]>arr[j+1]){
                let temp=arr[j+1];
                arr[j+1]=arr[j];
                arr[j]=temp;
            }
        }
    }return arr;    
}
console.log(bubbleSort([4,3,5,2,1,8,7,9,6]));

3.快速排序

思想:在數(shù)組中間項(xiàng)作為“基準(zhǔn)點(diǎn)”台猴,比基準(zhǔn)點(diǎn)小的數(shù)值項(xiàng)放到左邊,大的放到右邊

function quickSort(arr){
    if(arr.length<=1){
        return arr;
    }
    let pointIndex=Math.floor(arr.length/2);//選定數(shù)組中間值為基準(zhǔn)點(diǎn)
    let pointValue=arr.splice(pointIndex,1)[0];//獲取基準(zhǔn)點(diǎn)的值
    //數(shù)組拆分
    let left=[];
    let right=[];
    for(let i=0;i<arr.length;i++){
        arr[i]<pointValue?left.push(arr[i]):right.push(arr[i]);
    }
    //遞歸拆分
    return quickSort(left).concat([pointValue],quickSort(right));
}
console.log(quickSort([4,3,5,2,1,8,7,9,6]));

4.插入排序

思想:從左到右依次取數(shù)組中的項(xiàng)俱两,從后向前依次比較饱狂,選擇合適位置插入

function insertSort(arr){
    let newArr=[];
    newArr.push(arr[0]);//放入第一個(gè)值

    for (let i = 1;i<arr.length;i++) {
        for(let j=newArr.length-1;j>=0;){
            if(arr[i]<newArr[j]){
                j--;//從后向前依次比較
                
                if(j===-1){
                    newArr.unshift(arr[i]);
                }
            }else{
                newArr.splice(j+1,0,arr[i]);
                j=-1;
            }
        }
    }return newArr;
}
console.log(insertSort([4,3,5,2,1,8,7,9,6]));

5.數(shù)組去重

//方法一
var arr=[4,3,5,6,8,1,5,2,1,8,7,6,9];
var newArr=Array.from(new Set(arr));
console.log(newArr);

//方法二
 function unique(arr) {
  let result=[];
  for(let i=0;i<arr.length;i++){
    if(result.indexOf(arr[i])===-1){
      result.push(arr[i]);
    }
  }return result;  
}   
console.log(unique([1,3,5,4,3,1,4]));   

6.兩數(shù)交換

var a=2;
var b=3;
a=a+b;
b=a-b;
a=a-b;
console.log(a,b);

7.找出元素item在數(shù)組arr中的位置

function indexOf(arr,item){
    if(Array.prototype.indexOf){
        return arr.indexOf(item);
    }else{
        for(var i=0;i<arr.length;i++){
            if(arr[i]===item){
                return i;
            }else{return -1;}
        }
    }
}
var arr=[1,2,3,4,5,6];
var item=3;
var n=indexOf(arr,item); 
console.log(n);

8.計(jì)算給定數(shù)組arr中所有元素的總和

function sum(arr){
    var sum=0;
    arr.forEach(function(value){
        sum+=value;
    });return sum;
}
var arr=[1,2,3,4,5,6];
var n=sum(arr); 
console.log(n);

9.移除數(shù)組arr中所有與item相等的元素,返回新的數(shù)組

function remove(arr,item){
    var a=[];
    for(var i=0;i<arr.length;i++){
        if(arr[i]!==item)
            a.push(arr[i]);
    }return a;
}
var arr=[1,2,3,4,5,6];
var item=5;
var newArr=remove(arr,item); 
console.log(newArr);

10.移除數(shù)組arr中所有與item相等的元素宪彩,并將結(jié)果返回

function remove(arr,item){
    for(var i=0;i<arr.length;i++){
        if(arr[i]===item){
            arr.splice(i,1);
            i--;
        }
    }return arr;
}
var arr=[1,2,3,4,5,6];
var item=5;
remove(arr,item); 
console.log(arr);

11.實(shí)現(xiàn)一個(gè)打點(diǎn)計(jì)時(shí)器休讳,要求:

1.從start到end,每隔100毫秒consolo.log一個(gè)數(shù)字尿孔,每次增幅為1
2.返回的對象中需要包含一個(gè)cancal方法俊柔,用于停止定時(shí)操作
3.第一個(gè)數(shù)需要立即輸出

function count(start, end) {
    console.log(start++);
    var timer = setInterval(function(){
         if(start <= end){
            console.log(start++);
         }else{
            clearInterval(timer);
         }s
    },100);
    return {
         cancel : function(){
            clearInterval(timer);
        }
    };
} 
count(1,10);

12.實(shí)現(xiàn)fizzBuzz函數(shù),參數(shù)num與返回值的關(guān)系如下:

1.如果num能同時(shí)被3和5整除活合,返回字符串fizzbuzz
2.如果num能被3整除雏婶,返回字符串fizz
3.如果num能被5整除,返回字符串buzz
4.如果字符串為空或者不是Number類型白指,返回false
5.其余情況尚骄,返回參數(shù)num

function fizzBuzz(num) {
    if(num%3===0&&num%5===0){
        return "fizzbuzz";
    }else if(num%3===0){
        return "fizz";
    }else if(num%5===0){
        return "buzz";
    }else if(num===null||typeof num!=="number"){
        return false;
    }else return num;   
} 
var str=fizzBuzz("hello");
console.log(str);

13.找出整型數(shù)組中乘積最大的三個(gè)數(shù)

var arr=[-1,-2,-3,-4,0,1,2,3];
arr.sort(function(a,b){
    return a-b;
});
function findMax(arr){
    var length=arr.length-1;
    var max1=arr[0]*arr[1]*arr[length];
    var max2=arr[length]*arr[length-1]*arr[length-2];
    var Max;
    max1>max2?Max=max1:Max=max2;
    return Max;
}
console.log(findMax(arr));

14. 尋找連續(xù)數(shù)組中缺失的數(shù)字

var arr=[-1,-2,-3,-4,0,2,3];
arr.sort(function(a,b){
    return a-b;
});
var min=arr[0];
var max=arr[arr.length-1];
function findLost(arr){
    var sum1=0;
    var sum2=0;
    for(var i=0;i<arr.length;i++){
        sum1+=arr[i];
    }
    sum2=((min+max)*(max-min+1))/2;
    return sum2-sum1;
}
console.log(findLost(arr));

15.實(shí)現(xiàn)輸出斐波拉契數(shù)列

function Fibonacci(num){
    if(num===0){
        return 0;
    }else if(num===1){
        return 1;
    }else{
        return Fibonacci(num-2)+Fibonacci(num-1);
    }
}
var n=10;//斐波拉契數(shù)列長度
for(var i=0;i<n;i++){
    console.log(Fibonacci(i));
}

16.實(shí)現(xiàn)移除字符串空格函數(shù)Trim

function Trim(str){
    var start=0;
    var end=0;
    //去除左邊空格
    for(var i=0;i<str.length;i++){
        if(str[i]!=" "){
            start=i;
            break;
        }
    }
    //去除右邊空格
    for(var j=str.length-1;j>0;j--){
        if(str[j]!=" "){
            end=j;
            break;
        }
    }
    //去除中間超過一個(gè)的空格
    str=str.slice(start,end+1);
    var result="";
    for(var k=0;k<str.length;k++){
        if(str[k]===str[k+1]&&str[k]===" "){
            continue;
        }else{
            result=result.concat(str[k]);
        }
    }
    return result;
}
var str= "  a    bc  d  ";  
console.log(Trim(str)); 

17.二維數(shù)組中的查找

在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序侵续,每一列都按照從上到下遞增的順序排序。完成一個(gè)函數(shù)憨闰,輸入這樣的一個(gè)二維數(shù)組和一個(gè)整數(shù)状蜗,判斷數(shù)組中是否含有該整數(shù)。

function Find(target,array){
    var hang=array.length;//行的長度
    var lie=array[0].length;//列的長度
    if(hang===0&&lie===0){
        return false;
    }
    //選擇起點(diǎn)為二維數(shù)組左下角
    var i=0;
    var j=lie-1;
    while(i<hang&&j>-1){
        if(array[i][j]<target){
            i++;
        }else if(array[i][j]>target){
            j--;
        }else{
            return true;
        }
    }
    if(i>hang||j<0){
        return false;
    }
}

18.替換空格

實(shí)現(xiàn)一個(gè)函數(shù)鹉动,將一個(gè)字符串中的空格替換成“轧坎,”

function replaceSpace(str){
    return str.split(" ").join(",");
}
var string=replaceSpace("I love you");
console.log(string);

19.跳臺階

一只青蛙一次可以跳上1級臺階,也可以跳上2級泽示;求該青蛙跳上一個(gè)n級的臺階總共有多少種跳法缸血。

function jumpFloor(n){
    var a=1;
    var b=2;
    var c=0;
    if(n===1){c=1};
    if(n===2){c=2};
    for(var i=3;i<=n;i++){
        c=a+b;
        a=b;
        b=c;
    }return c;
}
var sum=jumpFloor(10);
console.log(sum);

20.調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)前

輸入一個(gè)整數(shù)數(shù)組,實(shí)現(xiàn)一個(gè)函數(shù)來調(diào)整該數(shù)組中數(shù)字的順序械筛,使得所有的奇數(shù)位于數(shù)組的前半部分捎泻,所有的偶數(shù)位于位于數(shù)組的后半部分,并保證奇數(shù)和奇數(shù)埋哟,偶數(shù)和偶數(shù)之間的相對位置不變笆豁。

function reOrderArray(array){
    var left=[];
    var right=[];
    var result=[];
    for(var i = 0; i < array.length; i++){
        if(array[i] % 2 == 0){
            right.push(array[i]);
        }else{
            left.push(array[i]);
        }
    }
    result=left.concat(right);
    return result;
}
var newArr=reOrderArray([4,1,2,6,5,3,9,8,7]);
console.log(newArr);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闯狱,更是在濱河造成了極大的恐慌煞赢,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哄孤,死亡現(xiàn)場離奇詭異照筑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瘦陈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門凝危,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人双饥,你說我怎么就攤上這事媒抠。” “怎么了咏花?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵趴生,是天一觀的道長。 經(jīng)常有香客問我昏翰,道長苍匆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任棚菊,我火速辦了婚禮浸踩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘统求。我一直安慰自己检碗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布码邻。 她就那樣靜靜地躺著折剃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪像屋。 梳的紋絲不亂的頭發(fā)上怕犁,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音己莺,去河邊找鬼奏甫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛凌受,可吹牛的內(nèi)容都是我干的阵子。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼胜蛉,長吁一口氣:“原來是場噩夢啊……” “哼款筑!你這毒婦竟也來了智蝠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤奈梳,失蹤者是張志新(化名)和其女友劉穎杈湾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體攘须,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漆撞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了于宙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浮驳。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捞魁,靈堂內(nèi)的尸體忽然破棺而出至会,到底是詐尸還是另有隱情,我是刑警寧澤谱俭,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布奉件,位于F島的核電站,受9級特大地震影響昆著,放射性物質(zhì)發(fā)生泄漏县貌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一凑懂、第九天 我趴在偏房一處隱蔽的房頂上張望煤痕。 院中可真熱鬧,春花似錦接谨、人聲如沸摆碉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巷帝。三九已至,卻和暖如春跑揉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背埠巨。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工历谍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辣垒。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓望侈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親勋桶。 傳聞我的和親對象是個(gè)殘疾皇子脱衙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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