javascript算法汇总(持续更新中)
1. 线性查找
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>线性查找</title> 6 </head> 7 <body> 8 9 <p>数组为:[2,4,6,23,53,545,65,3,24,5,3,6]</p> 10 <p>输入要查的值:<input type="text" id="serch" onchange="search_index(this.value)"><p> 11 <p>这个值在数组的位置是:<span id="val"></span><p> 12 13 14 15 <script> 16 //1.声明查找函数 17 //Arr为数组,x为要搜索的值 18 function search(Arr,x){ 19 for(var i=0; i<Arr.length; i++){ 20 if(Arr[i]==x){ 21 return i; //返回x在数组中的位置; 22 } 23 } 24 return "不存在"; //循环结束还未发现的话 则返回"不存在"; 25 } 26 27 //2.实例练习 28 var arr=[2,4,6,23,53,545,65,3,24,5,3,6]; //声明一个数组 29 function $$(id){ 30 return document.getElementById(id); 31 } 32 33 function search_index(value){ 34 var val=getX(arr,value) 35 $$("val").innerHTML=val; 36 } 37 38 function getX(Arr,x){ 39 var count=0; 40 console.log("循环执行了:"); 41 for(var i=0; i<Arr.length;i++){ 42 count++ 43 console.log(count);//输出循环执行的次数 44 if(Arr[i]==x){ 45 return i; 46 } 47 } 48 return "该值不存在"; 49 } 50 51 52 </script> 53 </body> 54 </html>
2.二分查找
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>二分查找温故</title> 6 </head> 7 <body> 8 9 <script> 10 //二分查找值适用于已经排好序的数组中 11 //二分就是逢中查找 步骤较少 12 var arr=[-13,2,4,6,8,12,34,35,45,56,57,88,110,234,239,342];//有序数组 13 14 function binarySearch(arr,x){ 15 var low=0,high=arr.length-1; 16 var count=0; 17 while(low<=high){ 18 count++; 19 console.log("这是第"+count+"次循环"); 20 var mid=Math.floor((low+high)/2); 21 if(arr[mid]==x){ 22 console.log("x所在数组内的引索是:"+mid); 23 return mid; 24 } 25 if(arr[mid]<x){//如果要查找的值大于二分值则low=mid+1; 26 27 low=mid+1; 28 console.log("此时low的值是:"+low); 29 }else{ 30 high=mid-1;//如果要查找的值小于二分值则high=mid-1; 31 console.log("此时high的值是:"+high); 32 } 33 34 } 35 36 } 37 binarySearch(arr,45); 38 </script> 39 </body> 40 </html>
3.冒泡排序
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript冒泡排序</title> 6 </head> 7 <body> 8 <script> 9 var arr=new Array(34,-3,43,67,12,44,21,34,5,645,64,3,43,23,25); 10 11 function bubbleSort(){ 12 var temp;//声明一个缓存变量 13 var count_outer=0;//外层循环计数 14 var count_inner=0;//内层循环计数 15 16 for(var i=0; i<arr.length;i++){//第一层循环 17 count_outer++; 18 console.log("这是外层循环的第"+count_outer+"次"); 19 for(var j=arr.length;j>0;j--){//第二层循环 20 count_inner++; 21 console.log("...................这是内层循环的第"+count_inner+"次"); 22 if(arr[j-1]<arr[j-2]){//判断后面一值如果小于前面一值 23 temp=arr[j-2];//那么将前面的值存放在temp里面 24 arr[j-2]=arr[j-1];//然后将后面一直放在前面值的位置 25 arr[j-1]=temp;//在把temp里的值放在后面那个位置 26 } 27 console.log(".......................................外层第"+count_outer+"次循环"+"内层第"+count_inner+"次循环"+"后的数组排序结果是"+arr) 28 } 29 } 30 return "最终排序后的数组是:["+arr+"]....一共循环了"+count_inner+"次"; 31 32 } 33 34 console.log(bubbleSort()); //控制台输出 35 36 </script> 37 </body> 38 </html>
4.阶乘
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>阶乘</title> 6 </head> 7 <body> 8 <script> 9 //created in 2014-04-30 10 //factorial function 11 12 function factorial(num){ 13 if(num<=1){ 14 return 1; 15 }else{ 16 return num*arguments.callee(num-1);//arguments 是一个类似数组的对象 包含函数中传入的参数 他有一个属性callee,它是一个指针 指向拥有这个arguments对象的函数也就是factorial 17 } 18 } 19 20 var fac=factorial;//不带括号的函数名是一个指向该函数的指针 所有fac现在也指向这个阶乘函数 21 alert(fac(3));//6 22 23 </script> 24 </body> 25 </html>
5.输出奇偶数控制
1 <html> 2 <head> 3 <title>只输出奇数或者偶数项</title> 4 </head> 5 <body> 6 <script> 7 var ck = true;//全局变量 8 function oddOreven(num) { //num为0或1 控制输出结果 是奇数还是偶数 9 for (var i = 0; i < 30; i++) { 10 if (ck) { 11 ck = false; //如果ck为true 让其等于false 12 alert(i + num); 13 } else { 14 ck = true; 15 } 16 } 17 } 18 //调用 19 oddOreven(0); //偶数 20 oddOreven(1) //奇数 21 </script> 22 </body> 23 </html>