常见简单算法的实现
数组相关:
1. 冒泡排序
//说明: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; }
BUG常伴吾身