zoukankan      html  css  js  c++  java
  • 合并排序

    具体原理可看这里

    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
    

  • 相关阅读:
    数组的一些经典案例(循环)(max=score[0])(冒泡)(flag标志)(杨辉三角)
    冒泡排序
    C语言之数组
    循环结构的一些案例:倒等腰三角形、菱形、暴力破解
    break和contine关键字
    循环嵌套(打印*** ***)
    循环的经典案例(李白买酒)
    C语言循环结构-while/do...while/for--逢3过,阶乘,九九乘法表
    WordPress部署踩坑记
    Symbol
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1650253.html
Copyright © 2011-2022 走看看