某笔试中的题,不得不承认这道题是个好题,考察了很多方面。js的数组操作,算法,逻辑能力,还有预防各种坑的能力……
一共搞了大概有4小时,函数逐个用firebug测,无法想象在考场上大概不到1小时,还不能调试……能写对的绝对是个神。公司遇到这样的神,就算其他题都不写也应该收了。
/*说明:将若干个正整数进行排序。排序方式为先按照因子数量从大到小排列,对于因子数量相同的按照值从大到小排。
比如数列[6,8,12,1,9,50],6的因子有1,2,3,6,因子数量为4;8的因子有1,2,4,8,因子数量为4.
按照因子数量排列的结果是[12,50,6,8,9,1]。对于因子相同的数比如12和50,按照从大到小排列,也就是说排列为50,12
需要注意的js的参数传递的特点:
1、可以在函数中直接改变它能够看到的变量和数组的值
2、数组的时可以通过传递进函数直接改变(类似于指针)
3、变量的值则不同,不能通过函数改变传入的值(和c语言相同)
总结一下里面的坑:
1、求因子数量。对于n=1的情况,只有一个因子。对于n是平方数的情况,平方数项是一个因子。除此以外的其他情况是两个因子
2、求因子数量里面是i<=Math.floor(Math.sqrt(n)),注意等号
3、del(arr,key)中,删除掉一个数字,要使指针前移一位 (此函数后来没有使用)
4、局部变量和全局变量的名字不要相同
*/
var a=[6,8,12,1,9,50,49,3,2,30];
showarray(a);
var sorted = new