JavaScript与Ruby的快速排序

时间:2017-08-06 04:08:40

标签: javascript ruby

我有一个红宝石背景,本周开始自学javascript。我一直在做练习问题来完成这个。

如果我要在ruby中解决这个问题,它看起来就是这样(顺便说一下,当我编写这个时,从红宝石中关闭javascript和代码要困难得多......)

class Array

  def quicksort(&prc)
    return self if self.size <= 1

    prc ||= Proc.new { |x, y| x <=> y }

    pivot = self[0]
    left = self[1..-1].select { |x| prc.call(x, pivot)  == -1 || prc.call(x, pivot) == 0 }
    right = self[1..-1].select { |x| prc.call(x, pivot) == 1 }

    left.quicksort(&prc) + [pivot] + right.quicksort(&prc)
  end

end

现在我对JavaScript没有太多问题......所有相同的概念都适用。除了语法不同之外,问题以相同的方式解决。我无法弄清楚如何在JS中编写比较器,因此我查看了解决方案以获得一些见解,如下所示。

Array.prototype.quickSort = function (comparator) {
  if (this.length <= 1) return this;

  if (typeof comparator !== "function") {
    comparator = (x, y) => {
      if (x === y) {
        return 0;
      } else if (x < y) {
        return -1;
      } else {
        return 1;
      }
    };
  }

  const pivot = this[0];
  const left = [];
  const right = [];

  for (let i = 1; i < this.length; i++) {
    if (comparator(this[i], pivot) === -1) {
      left.push(this[i]);
    } else {
      right.push(this[i]);
    }
  }

  return left.quickSort(comparator).
    concat([pivot]).
    concat(right.quickSort(comparator));
};

我知道比较器正在ruby&lt; =&gt;中构建宇宙飞船运营商。

我不明白if语句是做什么的,具体是什么!==“function”是。

if (typeof comparator !== "function")

非常感谢任何见解。 JS非常棒,成为我最喜欢的语言!

0 个答案:

没有答案