Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript排序是否彻底?_Javascript_Arrays_Algorithm_Sorting - Fatal编程技术网

JavaScript排序是否彻底?

JavaScript排序是否彻底?,javascript,arrays,algorithm,sorting,Javascript,Arrays,Algorithm,Sorting,我还有一个排序函数,基本上如下所示: constmysortingfunction=(a,b)=>{ 如果(a_在b(a,b)之前)返回1; if(b_before_a(a,b))返回-1; 返回0; } 让我们把a_-before_-b和b_-before_-a作为黑匣子,因为我认为它们只会分散我们对这个问题的注意力 my_unsorted_list.sort(mysorting函数); 这在整理我的列表方面做得不错。不幸的是,大约100个元素中的一小部分并没有正确排序 我相信有三种可能性

我还有一个排序函数,基本上如下所示:

constmysortingfunction=(a,b)=>{
如果(a_在b(a,b)之前)返回1;
if(b_before_a(a,b))返回-1;
返回0;
}
让我们把
a_-before_-b
b_-before_-a
作为黑匣子,因为我认为它们只会分散我们对这个问题的注意力

my_unsorted_list.sort(mysorting函数);
这在整理我的列表方面做得不错。不幸的是,大约100个元素中的一小部分并没有正确排序

我相信有三种可能性

  • 我的黑盒函数本身或彼此不一致
  • 内置的JavaScript排序并不彻底
  • 以上两项
为了测试第二个理论,我在
mySortingFunction
中插入了
console.log({a,b})
。我认为对于数组元素的每个可能的唯一配对,它至少会出现一次

但远低于这个数字。大约是列表中元素数量的4倍

所以我想,因为我的黑盒函数不能处理所有可能的情况,有时
mySortingFunction
返回
0
,这就是导致排序不完美的原因,其中一些元素的位置与黑盒函数所指示的位置相矛盾

这和我贴的问题差不多

我希望有人能告诉我,我列出的哪些可能性可能是问题所在,或者如果有其他问题我没有考虑

明确地说,我并不是要判断JavaScript的内置排序。当我问它是否“彻底”时,我的意思是,它是否打算以我使用它的方式使用

这是一个我正在尝试做的例子。正如您所看到的,即使逻辑是一致的,排序也会失败。我假设在下面的例子中(虽然我还不确定)没有足够的条件。但在我现实生活中的例子中,条件也可能不一致

我正试图找出哪一个是正确的

const sorted=['a','b','c','d'];
常量unsorted=['c','d','a','b'];
常数a_在b之前=(a,b)=>{
如果(a='a'&&b='d')返回true;
如果(a=='b'&&b=='c')返回true;
}
前常量b_a=(a,b)=>{
如果(b='a'&&a='c')返回true;
如果(b='b'&&a='c')返回true;
}
常量mySortingFunction=(a,b)=>{
if(a_before_b(a,b))返回-1;
如果(b_在a(a,b)之前)返回1;
返回0;
}

console.log(unsorted.sort(mySortingFunction));//排序算法工作正常。如果提供了不正确的排序函数,则结果为“实现定义”,并且是调用代码中的错误

Per:

如果comparefn[…]不是此数组元素的一致性比较函数(见下文),则排序顺序由实现定义。如果comparefn未定义且SortCompare不作为一致性比较函数,则排序顺序也由实现定义

这是所有比较类型的基本要求


在O(n lgn)时间内运行的排序(如合并排序或派生排序)不会检查所有可能的对置换。如果排序将比较应用于所有对组合,则至少需要O(n^2)个时间,并且如果没有一致的比较函数,仍然无法保证排序算法有效。如果提供了不正确的排序函数,则结果为“实现定义”,并且是调用代码中的错误

Per:

如果comparefn[…]不是此数组元素的一致性比较函数(见下文),则排序顺序由实现定义。如果comparefn未定义且SortCompare不作为一致性比较函数,则排序顺序也由实现定义

这是所有比较类型的基本要求


在O(n lgn)时间内运行的排序(如合并排序或派生排序)不会检查所有可能的对置换。如果排序将比较应用于所有对组合,则至少需要O(n^2)个时间,并且如果没有一致的比较函数,仍然无法保证进行排序。

您在排序什么?数字,文字?如果是文本,您使用的字符集是什么?我正在对字符串排序。而
mySortingFunction
应该通过
a_before_b
b_before_a
生成正确的排序。但事实并非如此,我需要知道这是否一定是这两个函数的问题。因为有时他们“不知道”如何对
a
b
进行排序,所以排序函数返回
0
。更好的是,你能给出一个“排序不好”数据的示例吗?我将尝试在代码片段中编写一个实例,希望使用一个非常小的数据集,如果我能重现这个问题的话。因为blackbox函数可能跨越几百行代码,我没有在这里发布它们。你在排序什么?数字,文字?如果是文本,您使用的字符集是什么?我正在对字符串排序。而
mySortingFunction
应该通过
a_before_b
b_before_a
生成正确的排序。但事实并非如此,我需要知道这是否一定是这两个函数的问题。因为有时他们“不知道”如何对
a
b
进行排序,所以排序函数返回
0
。更好的是,你能给出一个“排序不好”数据的示例吗?我将尝试在代码片段中编写一个实例,希望使用一个非常小的数据集,如果我能用它重现问题的话。因为blackbox函数可能跨越几百行代码,我没有在这里发布它们。谢谢你的回答。我希望你检查一下我问题的底部,我在那里贴了一个例子来说明我的问题,并为我提供了更多的信息?