js, 하나의 정수 배열 을 먼저 인자 수량 에 따라 정렬 한 다음 에 숫자 크기 에 따라 정렬 합 니 다.

3684 단어 js
어떤 필기시험 중의 문 제 는 어 쩔 수 없 이 이 문제 가 좋 은 문제 라 는 것 을 인정 하고 여러 방면 을 고찰 했다.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 Array();
sortFactorValue();
showarray(a);
function sortFactorValue()//        
{
	var f = new Array(a.length);
	getFactor(f);	//          
	sortByFactor(f);  //               
}

function getFactor(f)	//          
{
	for(var i=0;i<a.length;i++)
	{
		f[i]=countFactor(a[i]);
	}
	
}

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;
}

function sortByFactor(f)	//                   
{
	
	var i=0;
	while(i!=f.length)
	{	var start=i;
		var mf= Math.max.apply(Math,f.slice(i,f.length));
		i=findAndSwap(f,i,mf);	//    f  i   ,         ,        ,   i  1。                        
		sortByValue(start,i);	//              ,    i            
	}
}

function findAndSwap(f,i,mf)	//   f  i   ,    mf  ,        ,   i  1
{
	for(var j=i;j<f.length;j++)
	{
		if(f[j]==mf)	//          ,       ,      i 1,i           factor   
		{
			if(j==i)	//          ,      ,      
			{	i++;}
			else
			{	var p;	//          ,       ,      ,             
				p=f[j];f[j]=f[i];f[i]=p;
				p=a[j];a[j]=a[i];a[i]=p;
				i++;
			}
		}
	}
	return i;
}

function sortByValue(s,e)  
//   a  s   e          
//        findAndSwap    ,                。          ,           
{
	while(s!=e)
	{
		var max=Math.max.apply(Math,a.slice(s,e));
		for(var i=s;i<e;i++)
		{
			if(a[i]==max)
			{
				if(i==s)
				{	s++;}
				else
				{
					var p;
					p=a[i];a[i]=a[s];a[s]=p;
					s++;
				}
			}
		}
	}
}
/*function factorList(f)	//                
//                      ,         ,   
{
	var fl = new Array();
	var t = new Array();
	t = t.concat(f);
	while(t.length)
	{	
		var mf= Math.max.apply(Math,t);
		
		fl.push(mf); //          
		del(t,mf);	//             
	} 
	return fl;
}*/

function del(arr,key)	//   a     key     ,              
{	
	for(var i=0;i<arr.length;i++)
	{	
		if(arr[i]==key)
		{	arr.splice(i,1);	//        ,           
			i--;
		}
	}
}
function showarray(a0)  //    
{
	for(var i=0;i<a0.length;i++)
	{
		document.write(a0[i]+" ");
	}
	document.write("</br>");
}

좋은 웹페이지 즐겨찾기