JS数字排序问题

kaifadi 2010-04-07 01:22:58
<script language="javascript">
function px()
{
var sz=new Array();
var sk=document.getElementById("sj").value;

sz=sk.split(","); //在文本框内输入数据,然后以逗号分割开来
//alert(sz[0]);
var len=sz.length;

for(var i=0;i<len-1;i++)
{
for(var j=i+1;j<len;j++)
{
if(sz[i]>sz[j])
{
var temp=sz[i];
sz[i]=sz[j];
sz[j]=temp;
}
}
}
document.getElementById("jg").innerHTML=sz;
}

</script>
<form name="form1">
<input type="text" id="sj">
<input type="button" name="btn" onclick="px()" value="排序">
<span id="jg"></span>
</form>
以上方法的排序不成功.文本框内输入1,24,36,5,19后,结果变成1,19,24,36,5


但是直接带入数据到数组里却能正确排序.
代码如下:
<script language="javascript">
function px()
{
var sz=new Array(1,24,36,5,19);
var sk=document.getElementById("sj").value;

//sz=sk.split(","); 在文本框内输入数据,然后以逗号分割开来
//alert(sz[0]);
var len=sz.length;

for(var i=0;i<len-1;i++)
{
for(var j=i+1;j<len;j++)
{
if(sz[i]>sz[j])
{
var temp=sz[i];
sz[i]=sz[j];
sz[j]=temp;
}
}
}
document.getElementById("jg").innerHTML=sz;
}

</script>
<form name="form1">
<input type="text" id="sj">
<input type="button" name="btn" onclick="px()" value="排序">
<span id="jg"></span>
</form>

还望各位指教讨论,谢谢!
...全文
270 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CherishZheng 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 falizixun2 的回复:]
引用 2 楼 lianqin7 的回复:
if(+(sz[i]) > +(sz[j]))

2楼的if(parseInt(sz[i], 10)>parseInt(sz[j], 10))这个我很容易理解转化为整数.
那么你的+(sz[i]) 什么意思,难道也是转化数据类型的意思??还望指教谢谢!
[/Quote]
伴水哥有一篇文章讲这个的+()挺实用的转化类型的
kaifadi 2010-04-07
  • 打赏
  • 举报
回复
谢谢各位参与,我太疏忽了,犯了初级错误!

不过我更希望大家讨论一下算法问题,听说目前比较快的是谢尔排序!
for (var step = this.length >> 1; step > 0; step >>= 1)
{
for (var i = 0; i < step; ++i)
{
for (var j = i + step; j < this.length; j += step)
{
var k = j, value = this[j];
while (k >= step && this[k - step] > value)
{
this[k] = this[k - step];
k -= step;
}
this[k] = value;
}
}
}
不过我看得不太懂.对冒泡和选择的,对于很多初级人员来说很好理解,但是这个算法比较不好理解,谁能进行一下详细讲解,方便更多初学者能了解和学习一下!谢了!
sohighthesky 2010-04-07
  • 打赏
  • 举报
回复
var sz=new Array();
var sk=document.getElementById("sj").value;

sz=sk.split(","); //在文本框内输入数据,然后以逗号分割开来
sz.sort(function(a,b){
return a-b
})
document.getElementById("jg").innerHTML=sz;
zyzy15 2010-04-07
  • 打赏
  • 举报
回复
文本框里输入的是字符串,数组里是数字
字符串之间比较的话先比第一位,再比第二位……
需要 parseInt(sz[i],10)>parseInt(sz[j],10),1楼正解
lianqin7 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 falizixun2 的回复:]
引用 2 楼 lianqin7 的回复:
if(+(sz[i]) > +(sz[j]))

2楼的if(parseInt(sz[i], 10)>parseInt(sz[j], 10))这个我很容易理解转化为整数.
那么你的+(sz[i]) 什么意思,难道也是转化数据类型的意思??还望指教谢谢!
[/Quote]
就是字符串转数字,强制类型转化的一种方式,不过要保证sz[i]中的字符串一定是数字组成的,要不返回NaN
kaifadi 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lianqin7 的回复:]
if(+(sz[i]) > +(sz[j]))
[/Quote]
2楼的if(parseInt(sz[i], 10)>parseInt(sz[j], 10))这个我很容易理解转化为整数.
那么你的+(sz[i]) 什么意思,难道也是转化数据类型的意思??还望指教谢谢!
lianqin7 2010-04-07
  • 打赏
  • 举报
回复
if(+(sz[i]) > +(sz[j]))
s_liangchao1s 2010-04-07
  • 打赏
  • 举报
回复

if(parseInt(sz[i], 10)>parseInt(sz[j], 10))

87,910

社区成员

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

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