Skip to main content
 首页 » 编程设计

javascript之使用javascript执行数组交替排序的最佳算法

2024年08月15日16Terrylee

以下是我的面试问题。但我无法破解它,甚至不知道如何完成它。

var arr = [1,4,5,8,3,2,6,9,7,10]; 

替代排序的预期输出:

[10,1,9,2,8,3,7,4,6,5] 

我尝试过的:
我尝试切出 Math.max.apply(null,arr) 和 Math.min.apply(null,arr) 或者将其插入单独的空数组。但被告知该算法不是最优的。

请您参考如下方法:

我会对数组进行排序,然后迭代它,在每次迭代中从开头和结尾选取值(内循环计算的偏移量)。对奇数数组的最终检查将完成该过程。

let a = [1, 4, 5, 8, 3, 2, 6, 9, 7, 10]; 
a.sort((a, b) => a - b); 
let b =[]; 
     
let l = a.length-1;  // micro optimization 
let L = l/2;         // micro optimization 
for(var i=0; i<L; i++) b.push( a[l-i] ,a[i] ); 
if(a.length%2) b.push( a[i] ); // add last item in odd arrays 
 
console.log(b);

结果:

b =  [10, 1, 9, 2, 8, 3, 7, 4, 6, 5] 

算法的好处:

  • 避免对原始数组进行更改(通过 popshift),可显着提高性能。
  • 在循环之前预先计算lL,可以避免在每次迭代中重复计算。
  • 在过程结束时进行单个条件检查来处理奇数数组,可以稍微提高速度。

I've prepared some PERFORMANCE TESTS, with some of the proposed algorithms : Original Array(10 items) and Big Array(1000 items)