我这个SHELL排序为什么不灵?

lostnull 2003-01-06 04:57:04
function xxchar1234(xxcfc,xxcft)//shell
{
var j,k,h,y,z;
var n=xxcft.length;
//alert(xxcfc+"\n"+xxcft);
for(h=n/2;h>0;h=h/2)
{
for(j=h;j<n;j++)
{
y=xxcft[j];//out
z=xxcfc[j];//
for(k=j-h;k>=0&&y<xxcft[k];k-=h)//y<xxcft[k]
{
xxcft[k+h]=xxcft[k];//find&move
xxcfc[k+h]=xxcfc[k];//
}
xxcft[k+h]=y;//insert
xxcfc[k+h]=z;//
}//end for
}//end for
//alert(xxcfc+"\n"+xxcft);
}
...全文
16 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lostnull 2003-01-06
  • 打赏
  • 举报
回复
谢谢,我也会了!
for(h=parseInt(n/2);h>0;h=parseInt(h/2))
方工 2003-01-06
  • 打赏
  • 举报
回复
<script>
function shellsort(arr){
var x, i, j, d;
var n=arr.length;
for(d = parseInt(n/2); d >= 1; d =parseInt(d/2))
{
for(i = d; i < n; i++){
x=arr[i];
for(j = i-d; j >= 0; j -= d){
if(x < arr[j])
arr[j+d] = arr[j];
else
break;
}
arr[j+d] = x;
}
}
}

function testsort(){
var a = new Array();
for(var i=0; i<10; i++) a[i] = parseInt(Math.random()*100);
alert(a);
shellsort(a);
alert(a);
}
</script>
<button onclick="testsort()">test</button>
lostnull 2003-01-06
  • 打赏
  • 举报
回复
问题在这里h=h/2

我希望:当h=3时h/2=1

但程序运行时:当h=3时h/2=1.5

怎样使h的值为整数?且不要进位?
lostnull 2003-01-06
  • 打赏
  • 举报
回复
是不是变量的写法不对呀?

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧