如何使用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
运行此代码。您可以看到从头到尾的精确分步排序过程
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);