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>