代码改变世界

【思维】javascript冒泡排序

2010-01-14 11:28  BlueDream  阅读(511)  评论(0编辑  收藏  举报

学这些的目的就是为了锻炼逻辑思维.也许像冒泡排序这种低效的排序.很少能使用得到. 但高级算法也都是在这些简单算法的积累上产生的.

下面就介绍下冒泡排序的原理:

冒泡排序算法的运作如下

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个(体现在程序中.就是用外层循环的 i 的增加.使stop = len - i 不断减小.)。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

代码:

 

  function swap(items, firstIndex, secondIndex) {
        var temp = items[firstIndex];
        items[firstIndex] = items[secondIndex];
        items[secondIndex] = temp; 
    }
    function bubbleSort(items) {
        var len = items.length;
        if(len <= 0) return false;
        for(var i = 0; i < len; i++) {
            for(var j = 0, stop = len - i; j < stop; j++) {
                if(items[j] > items[j + 1]) {
                    swap(items, j, j + 1);
                }
            }
        }
        return items;
    }
    document.write(bubbleSort([1,3,8,4,5,3,2]) + '<br/>');

 

结果为:

1,2,3,3,4,5,8

 

也可以反序进行比较.然后将两个元素中小的排到最首位.

代码:

 

    function bubbleSort(items) {
        var len = items.length;
        for(var i = len - 1; i >= 0; i--) {
            for(var j = len - i; j >= 0; j--) {
                alert(j)
                if(items[j] < items[j - 1]) {
                    swap(items, j, j - 1);
                }
            }
        }
        return items;
    }

 

效果都是一样的.