是否有可能在 javascript 中的排序函数中导致无限循环?

Dek*_*kel 4 javascript arrays sorting

Array.prototype.sort 就地对数组的元素进行排序并返回排序后的数组。

来自的要求compareFunction(a, b)是:

  1. 获取两个元素(比较)
  2. 返回<0以放置a之前b
  3. 返回0以保持ab(相对于彼此)的原始位置
  4. 返回>0以放置b之前a
  5. 每对元素的返回值必须始终相同。

由于每个浏览器提供商可能会以不同的方式实现排序算法,我的问题是:是否可以提供一个compareFunction会导致sort函数在尝试对元素进行排序时进入无限循环的方法?

如果是这样 - 如果可能的话 - 它是否会被视为实现中的错误,或者如果compareFunction没有遵循上述说明 - 可以得到意想不到的结果吗?

要清楚 - 我不是问是否可以while (true);compareFunction.

use*_*740 5

不。

正确的排序算法(快速排序、归并排序、Tim 排序、冒泡排序等)总是在每次迭代中取得进展,因此不会出现像这样的无限循环。虽然可以设计一个函数来攻击特定排序实现的性能,但这不会阻止算法的终止。

可以想像,有可能是一个“自定义”类型的实现可能的方式,其中不稳定的比较功能(使呼叫功能无效,结果不可预测),可能会“挂”,这简直就是在排序执行工作严重缺陷被写入; 我对浏览器中使用广泛使用和经过彻底审查的排序实现的作者/贡献者给予了更多的信任。