Ruby's Louvre

每天学习一点点算法

导航

合并排序

具体原理可看这里

javascript版本:

        function merge(left, right){
          var result = [];
          while (left.length > 0 && right.length > 0){
            if (left[0] < right[0]){
              result.push(left.shift());//把最小的最先取出,放到结果集中
            } else {
              result.push(right.shift());
            }
          } return result.concat(left).concat(right);//剩下的就是合并,这样就排好序了
        }
        function mergeSort(array){
          if (array.length == 1) {
            return array;
          }
          var middle = Math.floor(array.length / 2),//求出中点
          left = array.slice(0, middle),//分割数组
          right = array.slice(middle);
          return merge(mergeSort(left), mergeSort(right));//递归合并与排序
        }

ruby版本:

  def merge(left, right)
    final = []
    until left.empty? or right.empty?
      final << ( left.first < right.first ? left.shift : right.shift )
    end
    final + left + right
  end
  def mergeSort(array)
    return array if array.size < 2
    left = array.first(array.size/2)
    right = array.last(array.size - array.size/2)
    merge(mergeSort(left), mergeSort(right))
  end

posted on 2010-01-17 23:56  司徒正美  阅读(1060)  评论(2编辑  收藏  举报