请大家看一下代码

        var li = document.getElementsByTagName('li');
         function bubbleSort(){
             for(var i = 0;i < li.length-1;i++){
                 for(var j = 0;j < li.length-i-1;j++){
                     if(parseInt(li[j].innerHTML) > parseInt(li[j+1].innerHTML)){
                         swap(li[j],li[j+1]);
                     }
                 }        
             }
             return li;
         }
         function swap(beforeIndex,afterIndex){
             var item = beforeIndex;
             beforeIndex = afterIndex;
             afterIndex = item;
         }
         function ff(){
             var aa = bubbleSort();
             for(var i = 0;i < aa.length;i++){
                 document.write(aa[i].innerHTML);
             }
         }

使用冒泡排序比较li中的数字大小,然后排序输出,将ff函数绑定在一个按钮上,但并没有排序,请问哪里有问题?

阅读 2.1k
2 个回答

先说下,我也是新手,所以第一次回答的有些问题,有错的地方还请海涵;
下面是我改的,不足之处,不吝赐教;

var lii = document.getElementsByTagName('li');
var liiLength = lii.length;
var liiArr = [];
//I think
for(var i=0;i<liiLength;i++){
    liiArr.push( parseInt(lii[i].innerText) );
}

function bubbleSort(lii){
    var li = lii;
    var temp = '';
    for(var i = 0; i < li.length-1; i++){
        for(var j = 0;j < li.length-i-1;j++){
            if(li[j] > li[j+1] ){
                //I think
                temp = li[j];
                li[j] = li[j+1];
                li[j+1] = temp;
            }
        }
    }
    return li;
}


function ff(lii){
    var aa = bubbleSort(lii);
    var aaLength = aa.length;
    for(var i = 0; i < aaLength; i++){
        document.write( aa[i] );
    }
}
ff(liiArr);
    

swap这么写是没效果的,除非

function swap (li, i, j) {
  var t = li[i]; li[i] = li[j]; li[j] = t;
}

// 调用
swap(li, j, j+1)

原因是 js 采用值传递,因此引用不会变化

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题