Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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_Sorting_Comparator - Fatal编程技术网

如何使用Javascript';什么工作?

如何使用Javascript';什么工作?,javascript,sorting,comparator,Javascript,Sorting,Comparator,下面的代码如何将此数组按数字顺序排序 var array=[25, 8, 7, 41] array.sort(function(a,b){ return a - b }) 我知道如果计算结果是 小于0:“a”被排序为比“b”低的索引。 零:认为“a”和“b”相等,不进行排序。 大于0:将“b”排序为比“a”低的索引。 在排序过程中是否多次调用数组排序回调函数 如果是这样的话,我想知道哪两个数字每次都被传递到函数中。我假设先是“25”(a)和“8”(b),然后是“7”(a)和“41”(b)

下面的代码如何将此数组按数字顺序排序

var array=[25, 8, 7, 41]

array.sort(function(a,b){
  return a - b
})
我知道如果计算结果是

小于0:“a”被排序为比“b”低的索引。
零:认为“a”和“b”相等,不进行排序。
大于0:将“b”排序为比“a”低的索引。

在排序过程中是否多次调用数组排序回调函数

如果是这样的话,我想知道哪两个数字每次都被传递到函数中。我假设先是“25”(a)和“8”(b),然后是“7”(a)和“41”(b),所以:

25(a)-8(b)=17(大于零,因此将“b”排序为比“a”低的索引):8,25

7(a)-41(b)=-34(小于零,因此将“a”排序为比“b”低的索引):7,41

那么这两组数字是如何相互排序的呢

请帮助一个苦苦挣扎的新手!

在排序过程中是否多次调用数组排序回调函数


是的,就是这样。回调用于根据需要比较数组中的元素对,以确定它们的顺序。在处理数字排序时,比较函数的实现不是非典型的。详细信息在其他站点中或在其他站点上。

JavaScript解释器在它在排序操作期间调用比较函数的次数。调用比较函数的次数取决于特定的算法、要排序的数据以及排序之前的顺序

有些排序算法在已经排序的列表上表现不佳,因为这会导致它们进行比典型情况下多得多的比较。另一些排序算法可以很好地处理预排序的列表,但在其他情况下,它们可能会被“欺骗”而表现不佳

有许多常用的排序算法,因为没有一种算法是适合所有用途的。最常用于通用排序的两种算法是和。快速排序通常是两种算法中速度较快的一种,但合并排序有一些很好的特性,可以使其成为更好的总体选择。合并排序是,而快速排序不是。这两种算法都是可合并,但合并排序的工作方式使并行实现更加高效,其他条件都相同

您的特定JavaScript解释器可能会使用这些算法中的一种或其他完全不同的算法。一致性实现必须使用的标准。它甚至明确否认了稳定性的需要

在排序过程中是否多次调用数组排序回调函数

如果是这样的话,我想知道哪两个数字每次都被传递到函数中

您可以通过以下方式了解自己:

array.sort((a,b) => {
  console.log(`comparing ${a},${b}`);
  return a > b ? 1
               : a === b ? 0 
                         : -1;
});
编辑

这是我得到的输出:

25,8
25,7
8,7
25,41

对值进行比较,一次一对。比较的值对是一个实现细节——不要假设它们在每个浏览器上都是相同的。回调可以是任何内容(因此可以对字符串或罗马数字或任何其他内容进行排序,您可以找到返回1,0,-1的函数)

JavaScript排序需要记住的一点是,它不能保证稳定

在排序过程中是否多次调用数组排序回调函数

由于这是一种比较排序,给定N个项,对于类似的快速排序,回调函数应平均调用(N*Lg N)次。如果使用的算法类似,则回调函数将平均调用(N*N)次

比较排序的最小调用次数为(N-1),这仅用于检测已排序的列表(即,如果没有发生交换,则在冒泡排序的早期)

输出

  • a=8,b=25
  • a=7,b=8
  • a=41,b=7
  • a=41,b=8
  • a=41,b=25
在我的浏览器(Google Chrome版本70.0.3538.77(官方版本)(64位))的第一次迭代中,参数a是数组中的第二个元素,参数b是数组中的第一个元素

如果Compare函数返回

  • 负值比b向前移动到a
  • 将a的正值向前移动到b
  • 0(零)a和b将保持原样

  • 运行此代码。您可以看到从头到尾的精确分步排序过程

    var array=[25, 8, 7, 41]
    var count = 1;
    array.sort( (a,b) => { 
    console.log(`${count++}). a: ${a} | b: ${b}`);
    return a-b;
    });
    console.log(array);
    

    渊博的知识

    如果结果为负,则a排序在b之前

    如果结果为正,则b排序在a之前

    如果结果为0,则不会更改这两个值的排序顺序

    注意:

    此代码是排序方法中的视图。

    输出:

    让arr=[90,1,20,14,3,55];
    var-sortRes=[];
    var copy=arr.slice();//创建重复数组
    var inc=0;//inc表示增量
    复制.排序((a,b)=>{
    sortRes[inc]=[a,b,a-b];
    inc+=1;
    返回a-b;
    });
    var p=0;
    对于(变量i=0;i{
    p+=1;
    
    如果(P<P)有助于澄清行为及其比较器,请考虑在入门编程课程中天真的教导:

    const sort=arr=>{
    for(设i=1;iarr[j];j--){
    [arr[j],arr[j-1]=[arr[j-1],arr[j]];
    }
    }
    };
    常量数组=[3,0,4,5,2,2,2,1,2,2,0];
    排序(数组);
    
    console.log(“+array”);
    而是将console.log添加到firebug或html DIV元素中。innerHTML+=“比较”+a+“,“+b+”\n”;请记住,这是一个类似wiki的网站,我们可以编辑其他答案以使其更好:)只需注意新ES6语法:
    array.sort((a,b)=>a-b);
    是有效的syntaxif sort
    var array=[25, 8, 7, 41]
    var count = 1;
    array.sort( (a,b) => { 
    console.log(`${count++}). a: ${a} | b: ${b}`);
    return a-b;
    });
    console.log(array);