码迷,mamicode.com
首页 > Web开发 > 详细

[转] js_常见算法

时间:2014-07-24 22:03:02      阅读:394      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   java   color   os   io   

 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="javascript:setflag(1);">设置起点</a><br>
186 <a href=javascript:setflag(2);>设置终点</a><br>
187 <a href=javascript:setflag(3);>设置障碍点</a><br>
188 <input type="button" onclick="setPos();main();this.disabled=true;" value="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 = 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 = 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 = array.join(" ");
151         txtOutput.value = "";
152     }
153 
154     function demo(type)
155     {
156         var array = txtInput.value == "" ? [] : 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 = array.join(" ");
163     }
164     
165     
166     function search()
167     {
168         var txtSearch =document.getElementById("txtSearch");
169         var array = txtInput.value == "" ? [] : 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 = arrayResult.join(" ");
185     }
186     
187     
188 </script></head>
189 <body onload=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="" style="width:50px"><br><br>
197         随机数个数<input id=txtCount value=500 style="width:50px"><br><br>
198         最大随机数<input id=txtMax value=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

[转] js_常见算法,布布扣,bubuko.com

[转] js_常见算法

标签:des   style   blog   http   java   color   os   io   

原文地址:http://www.cnblogs.com/renzimu/p/3866080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!