日期:2014-05-16  浏览次数:20355 次

js,将一个整数数组先按照因子数量排序,再按照数字大小排序 Version2
说明:将若干个正整数进行排序。排序方式为先按照因子数量从大到小排列,对于因子数量相同的按照值从大到小排。 
比如数列[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 
之前在博客发表了一个排列方法,后来在另一家面试的时候说起此事,面试官说考题的意思应该是考Array中sort方法的比较函数,我一想是这么回事,之前那个复杂的程序羞涩死我了。
 
 
function countFactor(n) //获取数字n的因子数量   
{  
    if(n==1)  
        return 1;  
    var f=2;  
    for(var i=2;i<=Math.floor(Math.sqrt(n));i++)  
    {   if(n%i==0)  
        {   if(Math.floor(Math.sqrt(n))==Math.sqrt(n))  
            {   f+=1;}  
            else  
            {   f+=2;}  
        }  
    }  
    return f;  
}  
/*比较函数应该具有两个参数a和b。如果返回值小于0,则a排在b前面;如果返回值大于0,则b排在a前面;如果返回值为0,顺序不变*/
function factorSort(a,b)
{
	if(countFactor(a)>countFactor(b))	/*因数多的总是排在因数少的前面*/
	{	return -1;}
	else if(countFactor(a)==countFactor(b))	/*因数相同的降序排列*/
	{	return b-a;}
	else
	{	return 1;}
}
var arr2 = new Array(6,8,12,1,9,50,49,3,2,30);
document.write("先按因数排列再按大小排列"+arr2.sort(factorSort)+"</br>");