代码改变世界

【思维】javascript选择排序

2010-01-18 09:39  BlueDream  阅读(514)  评论(0编辑  收藏  举报

上篇写了冒泡排序.冒泡排序算法复杂度为O(n^2).本篇在冒泡排序的基础上进行了一点精进.那就是选择排序.

选择排序与冒泡排序的区别就是:不需要像冒泡排序那样每次都交换元素.选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换.

 

这样选择排序的每个最小值的筛选.只需要一次元素的交换.

代码:

 

<script type="text/javascript">
    function swap(items, firstIndex, secondIndex) {
        var temp = items[firstIndex];
        items[firstIndex] = items[secondIndex];
        items[secondIndex] = temp;
    }
    
    function selectionSort(items) {
        var len = items.length, min;
        for(var i = 0; i < len; i++) {
            min = i;
            for(var j = i + 1; j < len; j++) {
                if(items[j] < items[min]) {
                    min = j;
                }
            }
            if(i != min) {
                swap(items, i, min);
            }
        }
        return items;
    }

    document.write(selectionSort([1,3,8,4,5,3,2]));
</script>

 

结果:

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