学习算法,简单做了个小练习,插入算法:
1 <script type="text/javascript"> 2 var n=100; 3 var array=new Array(n); 4 //用A来进行排序 5 var A=new Array(); 6 //生成100个随机数的数组 7 for(var i=0;i<array.length;i++) 8 { 9 array[i]=Math.floor(Math.random()*n); 10 document.writeln(array[i]); 11 } 12 //插入算法函数 13 function insertSort() 14 { 15 A[0]=array[0]; 16 var j=1; 17 var i=0; 18 for (j;j<array.length ;j++ ) 19 { 20 //从第二个数开始把已经有的数组中的数据赋值给A,然后排序 21 A[j]=array[j]; 22 var key=array[j]; 23 i=j-1; 24 //当前数据比已经排好序的数据最末尾要小时,则要插入。使用循环,直到把这个数插入到比它大的第一个数前面 25 //相当于对当前数据和已经排好序的做一次冒泡排序,小的冒到前面去 26 while(A[i+1]<A[i]&&i>=0) 27 { 28 //执行插入语句 29 A[i+1]=A[i]; 30 A[i]=key; 31 i=i-1; 32 } 33 } 34 } 35 document.writeln("<br/>-----------after sort---------<br/>"); 36 insertSort(); 37 for(var j=0;j<A.length;j++) 38 { 39 document.writeln(A[j]); 40 } 41 </script>
结果:
改进了下,发觉while中赋值可以在把所有大的数据移动往后后再插入
1 <script type="text/javascript"> 2 var n=100; 3 var array=new Array(n); 4 //用A来进行排序 5 var A=new Array(); 6 //生成100个随机数的数组 7 for(var i=0;i<array.length;i++) 8 { 9 array[i]=Math.floor(Math.random()*n); 10 document.writeln(array[i]); 11 } 12 //插入算法函数 13 function insertSort() 14 { 15 A[0]=array[0]; 16 var j=1; 17 var i=0; 18 for (j;j<array.length ;j++ ) 19 { 20 //从第二个数开始把已经有的数组中的数据赋值给A,然后排序 21 A[j]=array[j]; 22 var key=array[j]; 23 i=j-1; 24 //当前数据比已经排好序的数据最末尾要小时,则要插入。使用循环,直到把这个数插入到比它大的第一个数前面 25 //相当于对当前数据和已经排好序的做一次冒泡排序,小的冒到前面去 26 while(key<A[i]&&i>=0) 27 { 28 //执行插入语句 29 A[i+1]=A[i]; 30 i=i-1; 31 } 32 A[i+1]=key; 33 34 } 35 } 36 document.writeln("<br/>-----------after sort---------<br/>"); 37 insertSort(); 38 for(var j=0;j<A.length;j++) 39 { 40 document.writeln(A[j]); 41 } 42 </script>