常见简单算法的实现

数组相关

1. 冒泡排序

var arr = [10,20,24,43,30,28]; 
for (var i=1; i<arr.length; i++){
  for(var j=1; j<=arr.length-i; j++){
     if(arr[j-1]<arr[j]){
      var tmp = arr[j-1];
      arr[j-1] = arr[j];
      arr[j] = tmp;
     }
  }
}
console.log(arr);

//说明:i 表示比较的轮数,数组长度为n,则比较n-1轮。
     j 表示每轮比较的次数,每比较完一轮,下一轮比较次数少一次。

 2. 去掉数组中的某个元素:如去掉0

var arr = [10 , 0, 23, 0, 99, 0];
arrnew = new Array();
for (var i = 0 ; i < arr.length; i++){  
  if( arr[i] != 0 ){
    arrnew[arrnew.length] = arr[i];
  }
}
arr = arrnew;
console.log(arr);

3. 反转数组

var arr = [10,20, 30,50,25];
for(var i = 0; i < arr.length/2; i++){
  var tmp = arr[i];
  arr[i] = arr[arr.length-1-i];
  arr[arr.length-1-i] = tmp;
   }
console.log(arr);
//说明:数组反转是第一个和最后一个元素值交换位置,第二个和倒数第二个...,交换的次数<=arr.length/2,由于i是整数,i从0开始,i<2和i<2.5效果一样

4. 求数组中最大值

var arr = [12,23,41,12,33,11];
var max = arr[0];
for(var i=0; i<arr.length; i++){
    if(max < arr[i]){
        max = arr[i];
    }
}
console.log(max);

5. 数组倒序

var arr = [12,23,41,12,33,11];
var newarr = [];
var j = 0;
for(var i=arr.length-1; i>=0; i--){
    newarr[j] = arr[i];
    j++;
}
console.log(newarr);

6. 数组元素拼接字符串

var arr = [12,23,41,12,33,11];
var glue = "++";
var str = "";
for(var i=0; i<arr.length-1; i++){
    str += arr[i]+glue;
}
str += arr[arr.length-1];
console.log(str);

 

 循环相关:

1. 从数字100-200找出第一个能被7整除的数。

var i = 100;
while( i <= 200){ if( i%7 == 0){ console.log(i);
     break; }
  i++; }

2. 求出1-100中所有偶数的和

算法1:
var
i = 1;
var sum = 0;
while(i<=100){
  if(i%2 == 0){
     sum +=i;     
  }
  i++;
}
console.log(sum);

3. 画星星

//画直角三角形
for
(var i=0; i<9; i++){ for(var j=0; j<=i; j++){ document.write("*"); } document.write("<br>"); }

4. 乘法口诀

document.write('<table border="1" cellspacing="0" cellpadding="0">');
for(var i=1; i<=9; i++){
  document.write("<tr>");
  for(var j=1; j<=i; j++){
    document.write("<td>");
    document.write(j+"*"+i+"="+j*i);
    document.write("</td>");
  }
  document.write("</tr>");
}
document.write("</table>");

字符串相关:

1. 查找字符串中所有出现某个子串的位置

var str = "hello ni hao aasd asd asf ssas fffas";
var key = "as";
var index = 0;
while( ( index = str.indexOf(key, index) ) != -1){
    console.log(index);
    index += key.length+1;
}

2. 查找字符串中每个字符出现的次数

var str = "asdfiqSpfRasskdkfjgi";
str = str.toLocaleLowerCase();  //不区分大小写
var obj = {};
for(var i=0; i<str.length; i++){
    var key = str[i];
    if( obj[key] ){
        obj[key]++;
    }else{
        obj[key] = 1;
    }
}
for( var j in obj){
    console.log(j+"出现了"+obj[j]);
}

 

 

 

 函数相关

1. 求2个数中最大值:

var a = 21;
var b = 33;
function getMax(a, b){
    return a>b?a:b;
}
console.log(getMax(a,b));

2.求3个数中最大值

var a = 2221;
var b = 331;
var c = 98;
function getMax(a, b, c){
    return c>(a>b?a:b)?c:(a>b?a:b);
}
console.log(getMax(a,b,c));
说明:三个数比较大小和2个数比较大小是一样的

3.判断一个数是否是质数

function isPrimenum(num){
    for(var i=2; i<num; i++){
        if(num%i == 0){
            return false;
        }
    }
    return true;
}

4.输入年月日,判断这个日期是该年的第几天

//判断是否为闰年
function
isLeapYear(year){ if(year%4 == 0 && year%100 != 0 || year%400 == 0){ return true; } return false; }
//获取天数
function getDays(year, month, day){ var days = day; var months = [31,28,31,30,31,30,31,31,30,31,30,31]; if( month == 1){ return days; } for( var i = 0; i < month-1; i++ ){ days += months[i]; } if(isLeapYear(year)&&(month>2)){ days++; } return days; }

posted on 2019-11-30 15:29  反射弧  阅读(256)  评论(0编辑  收藏  举报

导航