javascript演算法彙總(持續更新中)

frontman發表於2014-04-03

 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>

javascript演算法-線性查詢

 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>

javascript演算法-二分查詢

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>

javascript演算法-氣泡排序

 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>

javascript演算法-階乘

 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>

View Code

 


相關文章