首页 > 代码库 > [转] js_常见算法

[转] js_常见算法

 js模拟螺旋矩形算法

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3  <head> 4      <meta http-equiv="content-type" content="text/html;charset=utf-8"  /> 5      <meta name="generator" content="editplus" /> 6      <meta name="author" content="" /> 7      <meta name="keywords" content="" /> 8      <meta name="description" content="" /> 9      <title> new document </title>10   11  </head>12 13  <body>14      <div id="container"></div>15      <script type="text/javascript">16              var cal = function(len){17     var helix = [[],[],[],[],[],[]];18     var min = 0;19     var max = len - 1;20     var row = 0;21     var col = 0;22     for(var i=0; i < len * len; i++) {23         helix[row][col]=i+1;24         if(row == min && col < max) {25             col = col + 1;26         }27         else if(row < max && col == max) {28             row = row + 1;29         }30         else if(row == max && col > min) {31             col = col - 1;32         }33         else if(row > min && col == min) {34             row = row - 1;35         }36         if(row - 1 == min && col == min){37             min = min + 1;38             max = max - 1;39                 }40     }41     return helix;42 };43 44 var helix = cal(6);45 var html = ‘‘;46 for(var i=0; i < helix.length; i++) {47     for(var j=0; j < helix[i].length; j++) {48         if(helix[i][j]<10){49             helix[i][j]="0"+helix[i][j];50         }51         html += helix[i][j] +  ;52     }53     html += <br />;54 }55 var  container=document.getElementById("container");56 container.innerHTML =html;57      </script>58  </body>59 </html>

 js最短路径

  1 <html><head><title>use A* to find path...</title></head>  2 <body style="margin:0px">  3 <script>  4 /*  5 written by hjjboy  6 email:tianmashuangyi@163.com  7 qq:156809986  8 */  9 var closelist=new Array(),openlist=new Array(); 10 var gw=10,gh=10,gwh=14; 11 var p_start=new Array(2),p_end=new Array(2); 12 var s_path,n_path=""; 13 var num,bg,flag=0; 14 var w=30,h=20; 15 function GetRound(pos){ 16  var a=new Array(); 17  a[0]=(pos[0]+1)+","+(pos[1]-1); 18  a[1]=(pos[0]+1)+","+pos[1]; 19  a[2]=(pos[0]+1)+","+(pos[1]+1); 20  a[3]=pos[0]+","+(pos[1]+1); 21  a[4]=(pos[0]-1)+","+(pos[1]+1); 22  a[5]=(pos[0]-1)+","+pos[1]; 23  a[6]=(pos[0]-1)+","+(pos[1]-1); 24  a[7]=pos[0]+","+(pos[1]-1); 25  return a; 26 } 27 function GetF(arr){ 28  var t,G,H,F; 29  for(var i=0;i<arr.length;i++){ 30   t=arr[i].split(","); 31   t[0]=parseInt(t[0]);t[1]=parseInt(t[1]); 32   if(IsOutScreen([t[0],t[1]])||IsPass(arr[i])||InClose([t[0],t[1]])||IsStart([t[0],t[1]])||!IsInTurn([t[0],t[1]])) 33     continue; 34   if((t[0]-s_path[3][0])*(t[1]-s_path[3][1])!=0) 35     G=s_path[1]+gwh; 36   else 37     G=s_path[1]+gw; 38   if(InOpen([t[0],t[1]])){ 39     if(G<openlist[num][1]){ 40      openlist[num][0]=(G+openlist[num][2]); 41      openlist[num][1]=G; 42      openlist[num][4]=s_path[3]; 43     } 44     else{G=openlist[num][1];} 45   } 46   else{ 47     H=(Math.abs(p_end[0]-t[0])+Math.abs(p_end[1]-t[1]))*gw; 48     F=G+H; 49     arr[i]=new Array(); 50     arr[i][0]=F;arr[i][1]=G;arr[i][2]=H;arr[i][3]=[t[0],t[1]];arr[i][4]=s_path[3]; 51     openlist[openlist.length]=arr[i]; 52   } 53   if(maptt.rows[t[1]].cells[t[0]].style.backgroundColor!="#cccccc"&&maptt.rows[t[1]].cells[t[0]].style.backgroundColor!="#0000ff"&&maptt.rows[t[1]].cells[t[0]].style.backgroundColor!="#ff0000"&&maptt.rows[t[1]].cells[t[0]].style.backgroundColor!="#00ff00") 54   { 55     maptt.rows[t[1]].cells[t[0]].style.backgroundColor="#FF00FF"; 56     //maptt.rows[t[1]].cells[t[0]].innerHTML="<font color=white>"+G+"</font>"; 57   } 58  } 59 } 60 function IsStart(arr){ 61  if(arr[0]==p_start[0]&&arr[1]==p_start[1]) 62   return true; 63  return false; 64 } 65 function IsInTurn(arr){ 66  if(arr[0]>s_path[3][0]){ 67   if(arr[1]>s_path[3][1]){ 68     if(IsPass((arr[0]-1)+","+arr[1])||IsPass(arr[0]+","+(arr[1]-1))) 69      return false; 70   } 71   else if(arr[1]<s_path[3][1]){ 72     if(IsPass((arr[0]-1)+","+arr[1])||IsPass(arr[0]+","+(arr[1]+1))) 73      return false; 74   } 75  } 76  else if(arr[0]<s_path[3][0]){ 77   if(arr[1]>s_path[3][1]){ 78     if(IsPass((arr[0]+1)+","+arr[1])||IsPass(arr[0]+","+(arr[1]-1))) 79      return false; 80   } 81   else if(arr[1]<s_path[3][1]){ 82     if(IsPass((arr[0]+1)+","+arr[1])||IsPass(arr[0]+","+(arr[1]+1))) 83      return false; 84   } 85  } 86  return true; 87 } 88 function IsOutScreen(arr){ 89  if(arr[0]<0||arr[1]<0||arr[0]>(w-1)||arr[1]>(h-1)) 90   return true; 91  return false; 92 } 93 function InOpen(arr){ 94  var bool=false; 95  for(var i=0;i<openlist.length;i++){ 96   if(arr[0]==openlist[i][3][0]&&arr[1]==openlist[i][3][1]){ 97     bool=true;num=i;break;} 98  } 99  return bool;100 }101 function InClose(arr){102  var bool=false;103  for(var i=0;i<closelist.length;i++){104   if((arr[0]==closelist[i][3][0])&&(arr[1]==closelist[i][3][1])){105     bool=true;break;}106  }107  return bool;108 }109 function IsPass(pos){110  if((";"+n_path+";").indexOf(";"+pos+";")!=-1)111   return true;112  return false;113 }114 function Sort(arr){115  var temp;116  for(var i=0;i<arr.length;i++){117   if(arr.length==1)break;118   if(arr[i][0]<=arr[i+1][0]){119     temp=arr[i];120     arr[i]=arr[i+1];121     arr[i+1]=temp;122   }123   if((i+1)==(arr.length-1))124     break;125  }126 }127 function main(){128   GetF(GetRound(s_path[3]));129   Sort(openlist);130   s_path=openlist[openlist.length-1];131   closelist[closelist.length]=s_path;132   openlist[openlist.length-1]=null;133   if(openlist.length==0){alert("找不到路径");return;}134   openlist.length=openlist.length-1;135   if((s_path[3][0]==p_end[0])&&(s_path[3][1]==p_end[1])){136     getPath();137   }138   else{maptt.rows[s_path[3][1]].cells[s_path[3][0]].style.backgroundColor="#00ff00";setTimeout("main()",100);}139 }140 function getPath(){141  var str="";142  var t=closelist[closelist.length-1][4];143  while(1){144   str+=t.join(",")+";";145   maptt.rows[t[1]].cells[t[0]].style.backgroundColor="#ffff00";146   for(var i=0;i<closelist.length;i++){147     if(closelist[i][3][0]==t[0]&&closelist[i][3][1]==t[1])148      t=closelist[i][4];149   }150   if(t[0]==p_start[0]&&t[1]==p_start[1])151     break;152  }153  alert(str);154 }155 function setPos(){156  var h=(Math.abs(p_end[0]-p_start[0])+Math.abs(p_end[1]-p_start[1]))*gw;157  s_path=[h,0,h,p_start,p_start];158 }159 function set(id,arr){160  switch(id){161   case 1:162     p_start=arr;163     maptt.rows[arr[1]].cells[arr[0]].style.backgroundColor="#ff0000";break;164   case 2:165     p_end=arr;maptt.rows[arr[1]].cells[arr[0]].style.backgroundColor="#0000ff";break;166   case 3:167     n_path+=arr.join(",")+";";maptt.rows[arr[1]].cells[arr[0]].style.backgroundColor="#cccccc";break;168   default:169     break;170  }171 }172 function setflag(id){flag=id;}173 </script>174 <table id="maptt" cellspacing="1" cellpadding="0" border="0" bgcolor="#000000">175 <script>176 for(var i=0;i<h;i++){177  document.write("<tr>");178  for(var j=0;j<w;j++){179   document.write(<td onclick="set(flag,[+j+,+i+]);" bgcolor="#ffffff" width="20" height="20"></td>);180  }181  document.write("</tr>");182 }183 </script>184 </table>185 <a href=http://www.mamicode.com/"javascript:setflag(1);">设置起点</a><br>186 <a href=http://www.mamicode.com/javascript:setflag(2);>设置终点</a><br>187 <a href=http://www.mamicode.com/javascript:setflag(3);>设置障碍点</a><br>188 <input type="button" onclick="setPos();main();this.disabled=true;" value=http://www.mamicode.com/"find">189 </body>190 </html>

js_常见排序算法

  1 <html><head><script>  2     Array.prototype.swap = function(i, j)  3     {  4         var temp = this[i];  5         this[i] = this[j];  6         this[j] = temp;  7     }  8   9     Array.prototype.bubbleSort = function() 10     { 11         for (var i = this.length - 1; i > 0; --i) 12         { 13             for (var j = 0; j < i; ++j) 14             { 15                 if (this[j] > this[j + 1]) this.swap(j, j + 1); 16             } 17         } 18     } 19  20     Array.prototype.selectionSort = function() 21     { 22         for (var i = 0; i < this.length; ++i) 23         { 24             var index = i; 25             for (var j = i + 1; j < this.length; ++j) 26             { 27                 if (this[j] < this[index]) index = j; 28             } 29             this.swap(i, index); 30         } 31     } 32  33     Array.prototype.insertionSort = function() 34     { 35         for (var i = 1; i < this.length; ++i) 36         { 37             var j = i, value = http://www.mamicode.com/this[i]; 38             while (j > 0 && this[j - 1] > value) 39             { 40                 this[j] = this[j - 1]; 41                 --j; 42             } 43             this[j] = value; 44         } 45     } 46  47     Array.prototype.shellSort = function() 48     { 49         for (var step = this.length >> 1; step > 0; step >>= 1) 50         { 51             for (var i = 0; i < step; ++i) 52             { 53                 for (var j = i + step; j < this.length; j += step) 54                 { 55                     var k = j, value = http://www.mamicode.com/this[j]; 56                     while (k >= step && this[k - step] > value) 57                     { 58                         this[k] = this[k - step]; 59                         k -= step; 60                     } 61                     this[k] = value; 62                 } 63             } 64         } 65     } 66  67     Array.prototype.quickSort = function(s, e) 68     { 69         if (s == null) s = 0; 70         if (e == null) e = this.length - 1; 71         if (s >= e) return; 72         this.swap((s + e) >> 1, e); 73         var index = s - 1; 74         for (var i = s; i <= e; ++i) 75         { 76             if (this[i] <= this[e]) this.swap(i, ++index); 77         } 78         this.quickSort(s, index - 1); 79         this.quickSort(index + 1, e); 80     } 81  82     Array.prototype.stackQuickSort = function() 83     { 84         var stack = [0, this.length - 1]; 85         while (stack.length > 0) 86         { 87             var e = stack.pop(), s = stack.pop(); 88             if (s >= e) continue; 89             this.swap((s + e) >> 1, e); 90             var index = s - 1; 91             for (var i = s; i <= e; ++i) 92             { 93                 if (this[i] <= this[e]) this.swap(i, ++index); 94             } 95             stack.push(s, index - 1, index + 1, e); 96         } 97     } 98  99     Array.prototype.mergeSort = function(s, e, b)100     {101         if (s == null) s = 0;102         if (e == null) e = this.length - 1;103         if (b == null) b = new Array(this.length);104         if (s >= e) return;105         var m = (s + e) >> 1;106         this.mergeSort(s, m, b);107         this.mergeSort(m + 1, e, b);108         for (var i = s, j = s, k = m + 1; i <= e; ++i)109         {110             b[i] = this[(k > e || j <= m && this[j] < this[k]) ? j++ : k++];111         }112         for (var i = s; i <= e; ++i) this[i] = b[i];113     }114 115     Array.prototype.heapSort = function()116     {117         for (var i = 1; i < this.length; ++i)118         {119             for (var j = i, k = (j - 1) >> 1; k >= 0; j = k, k = (k - 1) >> 1)120             {121                 if (this[k] >= this[j]) break;122                 this.swap(j, k);123             }124         }125         for (var i = this.length - 1; i > 0; --i)126         {127             this.swap(0, i);128             for (var j = 0, k = (j + 1) << 1; k <= i; j = k, k = (k + 1) << 1)129             {130                 if (k == i || this[k] < this[k - 1]) --k;131                 if (this[k] <= this[j]) break;132                 this.swap(j, k);133             }134         }135     }136 137     function generate()138     {139         var max = parseInt(txtMax.value), count = parseInt(txtCount.value);140         if (isNaN(max) || isNaN(count))141         {142             alert("个数和最大值必须是一个整数");143             return;144         }145         var array = [];146         for (var i = 0; i < count; ++i) array.push(Math.round(Math.random() * max));147         148         array.push("99");149         150         txtInput.value = http://www.mamicode.com/array.join(" ");151         txtOutput.value = http://www.mamicode.com/"";152     }153 154     function demo(type)155     {156         var array = txtInput.value =http://www.mamicode.com/= "" ? [] : txtInput.value.replace().split(" ");157         for (var i = 0; i < array.length; ++i) array[i] = parseInt(array[i]);158         var t1 = new Date();159         eval("array." + type + "Sort()");160         var t2 = new Date();161         lblTime.innerText = t2.valueOf() - t1.valueOf();162         txtOutput.value = http://www.mamicode.com/array.join(" ");163     }164     165     166     function search()167     {168         var txtSearch =document.getElementById("txtSearch");169         var array = txtInput.value =http://www.mamicode.com/= "" ? [] : txtInput.value.replace().split(" ");170         var arrayResult = new Array();171         var t1 = new Date();172         alert(array.length);173         for (var i = 0; i < array.length; ++i)174         {175             176            if( array[i].indexOf( txtSearch.value ) >= 0 ) {177                     arrayResult.push(array[i]);178              }179         }180         181         //eval("array." + type + "Sort()");182         var t2 = new Date();183         lblTime.innerText = t2.valueOf() - t1.valueOf();184         txtOutput.value = http://www.mamicode.com/arrayResult.join(" ");185     }186     187     188 </script></head>189 <body onl oad=generate()>190 <table style="width:100%;height:100%;font-size:12px;font-family:宋体">191 <tr>192     <td align=right>193         <textarea id=txtInput readonly style="width:100px;height:100%"></textarea>194     </td>195     <td width=150 align=center>196         检索 <input id="txtSearch" value=http://www.mamicode.com/"" style="width:50px"><br><br>197         随机数个数<input id=txtCount value=http://www.mamicode.com/500 style="width:50px"><br><br>198         最大随机数<input id=txtMax value=http://www.mamicode.com/1000 style="width:50px"><br><br>199         <button onclick=generate()>重新生成</button><br><br><br><br>200         耗时(毫秒):<label id=lblTime></label><br><br><br><br>201         <button onclick=demo("bubble")>冒泡排序</button><br><br>202         <button onclick=demo("selection")>选择排序</button><br><br>203         <button onclick=demo("insertion")>插入排序</button><br><br>204         <button onclick=demo("shell")>谢尔排序</button><br><br>205         <button onclick=demo("quick")>快速排序(递归)</button><br><br>206         <button onclick=demo("stackQuick")>快速排序(堆栈)</button><br><br>207         <button onclick=demo("merge")>归并排序</button><br><br>208         <button onclick=demo("heap")>堆排序</button><br><br>209         <button onclick=search()>检索</button><br><br>210     </td>211     <td align=left>212         <textarea id=txtOutput readonly style="width:100px;height:100%"></textarea>213     </td>214 </tr>215 </table>216 </body></html>

[转载]

http://www.w3cfuns.com/blog-5425789-5399153.html