1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>希尔排序</title> <!--<link rel="stylesheet" type="text/css" href="../style/fdt.css" />--> <script type="text/javascript" src="../js/jquery-1.6.2.min.js"></script> <script type="text/javascript" src="../js/jquery.easydrag.handler.beta2.js"></script> <script type="text/javascript">
$(document).ready( function() { var array_1 = [9,8,7,6,5,4,3,2,1]; alert(array_1); /*shellSort*/ alert(shellSort(array_1));
} );
</script>
<style type="text/css"> * { padding:0; margin:0; }
body { padding: 100px; font-size: 15px; }
</style>
<script type="text/javascript"> function shellSort(array){ var stepArr = [1031612713, 217378076, 45806244, 9651787, 2034035, 428481, 90358, 19001, 4025, 1750, 836, 701, 301, 132, 57, 23, 10, 4, 1]; // reverse() 在维基上看到这个最优的步长 较小数组 var i = 0; var stepArrLength = stepArr.length; var len = array.length; var len2 = parseInt(len/2); for(;i < stepArrLength; i++){ if(stepArr[i] > len2){ continue; } stepSort(stepArr[i]); } // 排序一个步长 function stepSort(step){ //console.log(step) 使用的步长统计 var i = 0, j = 0, f, tem, key; for(;i < step; i++){// 依次循环列 for(j=1; step * j + i < len; j++){//依次循环每列的每行 tem = f = step * j + i; key = array[f]; while((tem-=step) >= 0){// 依次向上查找 <- // <---- // <-------
if(array[tem] > key){ array[tem+step] = array[tem]; }else{ break; } } array[tem + step ] = key; } } } return array; }
</script>
</head>
<body> 希尔排序 </body> </html>
|