Discuss / JavaScript / 数列排序和冒泡排序

数列排序和冒泡排序

Topic source

王闪_Frank

#1 Created at ... [Delete] [Delete and Lock User]

先写了一个方法,逻辑是找出list,然后用内置的排序方法sort()进行排序,然后把文本回写到每个DOM节点的innerText;这个方法的局限性是如果不同DOM节点的其他属性不一样,如style,就不能用了

    var js = document.getElementById('test-list');
    var arr = [];
    //找到所有的list,然后排序
    for( var i=0; i<js.children.length; i++ ){
        arr.push(js.children[i].innerText);
    }
    arr.sort();
    //因为style什么的都一样,所以只修改innerText值
    for (var i = 0; i < js.children.length; i++) {
        js.children[i].innerText = arr[i];
    }

第二种是把DOM节点下node的所有信息都交换,用的是insertBefore方法和冒泡排序的算法;

     //冒泡排序,比较1/2-1/3-1/4-2/3-2/4-3/4......
    //字符小的文字和大的比较,大的那个插到前面来
    for (var i = 0; i < js.children.length - 1; i++ ) {
        for (var j = i + 1; j < js.children.length; j++ ) {
            // console.log(i);
            // console.log(j);
            if (js.children[i].innerText > js.children[j].innerText) {
                console.log(i, j);
                console.log(js.children[i].innerText, js.children[j].innerText);
                js.insertBefore(js.children[j], js.children[i]);
            }
        }
    }

王闪_Frank

#2 Created at ... [Delete] [Delete and Lock User]

忘了注释console.log()了

L0standfound

#3 Created at ... [Delete] [Delete and Lock User]

求救第二种方法中for循环里面的+1和-1是为什么?

LevonLin

#4 Created at ... [Delete] [Delete and Lock User]

@L0standfound: j = i + 1决定比较区间的起点,因为不会自己跟自己比,所以从i+1开始啊; children.length - 1免去最后一次比较,因为最小的都冒泡到前面去了,最后一个一定是最大的。


  • 1

Reply