<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>还望各位指教讨论,谢谢!

解决方案 »

  1.   


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

  2.   

    2楼的if(parseInt(sz[i], 10)>parseInt(sz[j], 10))这个我很容易理解转化为整数.
    那么你的+(sz[i]) 什么意思,难道也是转化数据类型的意思??还望指教谢谢!
      

  3.   

    就是字符串转数字,强制类型转化的一种方式,不过要保证sz[i]中的字符串一定是数字组成的,要不返回NaN
      

  4.   

    文本框里输入的是字符串,数组里是数字
    字符串之间比较的话先比第一位,再比第二位……
    需要 parseInt(sz[i],10)>parseInt(sz[j],10),1楼正解
      

  5.   

    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;
      

  6.   

    谢谢各位参与,我太疏忽了,犯了初级错误!不过我更希望大家讨论一下算法问题,听说目前比较快的是谢尔排序!
    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;
                    }
                }
            }
    不过我看得不太懂.对冒泡和选择的,对于很多初级人员来说很好理解,但是这个算法比较不好理解,谁能进行一下详细讲解,方便更多初学者能了解和学习一下!谢了!