[etc] 최댓값,최솟값, 정렬


최댓값, 최솟값

sort -> 안됨

let a = [ 10 , 20 , 30 , 1 ,2, 3, 5, 9, 11];

a.sort()
console.log( `Min : ${a[0]}`)
console.log( `Min : ${a[a.length-1]}`)
console.log("sort해서 맨앞 값, 맨 뒷값은 작동 안함.")

Math.max

console.log( `Math.max ${Math.max(10,20)}` )
console.log( `Math.max ${Math.max(a)} 배열은 작동 안함` )

Math.max.apply

console.log( `Math.max.apply ${Math.max.apply(null, a)}` )
console.log( `Math.min.apply ${Math.min.apply(null, a)}` )

for

let m=0;
for( var i of a ){
    if( i > m) m=i;
};
console.log(`for ${m}`);

Reduce


result1 = a.reduce(function(a,b){
    return a>b? a:b
});
console.log( `max : ${result1}`  )


result2 = a.reduce(function(a,b){
    return a<b? a:b
});
console.log( `min : ${result2}`  )

정렬

선택정렬

let a = [10,11,9,2,3,6,5,4];
let result = [];

while(true){
    min = Math.min.apply(null,a);
    result.push( min )
    a.splice(a.indexOf(min)  ,1)
    if( a.length == 0 ) break;
};

console.log( result)

삽입정렬

function findIndex(  result , a  ){
    for( var i in result ){
        if( a < result[i]){
            return i;
        };
    }
    return result.length;
}

let a= [5,10,66,77,54,32,11,15];
let result = [];
let arrLength = a.length;

for( var i=0; i<arrLength ; i++){
    insertValue = a.shift();
    index = findIndex(  result , insertValue );
    result.splice( index , 0 , insertValue );
    console.log( `인덱스 : ${index}`)
    console.log(`정렬된 배열 : ${result}`)
};
console.log( result )

병합정렬

// 어떤 정렬보다 빠름

let a = [5,10,66,77,54,32,11,15];

/*
분할
[5,10,66,77,54,32,11,15]
[5,10,66,77], [54,32,11,15]
[5,10],[66,77], [54,32],[11,15]
[5],[10],[66],[77], [54],[32],[11],[15]

정복
[5,10] , [66,77] , [32,54] , [11,15] -이제 0번째만 비교
[ 5 , 10 , 66 , 77 ] , [11,15,32,54]
[5,10,11,15,32,54,66,77]
*/

function 병합정렬(입력배열){
    let 입력배열의길이 = 입력배열.length;
    let 결과값 = [];
    if( 입력배열의길이 <= 1) return 입력배열;

    let 중간값 = parseInt(입력배열의길이/2);
    let 그룹하나 = 병합정렬( 입력배열.slice(0,중간값) );
    let 그룹둘 = 병합정렬( 입력배열.slice(중간값) );

    while(그룹하나.length!=0 && 그룹둘.length!=0){
        if( 그룹하나[0] < 그룹둘[0]){
            결과값.push( 그룹하나.shift() )
        }else{
            결과값.push( 그룹둘.shift() )
        };
    };

    while(그룹하나.length != 0 ){
        결과값.push( 그룹하나.shift() )
    };
    while(그룹둘.length != 0 ){
        결과값.push( 그룹둘.shift() )
    };



    return 결과값
}
console.log( 병합정렬(a) )

퀵정렬

/*
worst - O(nLog2n)
best  - O(n**n)
*/

let 입력값 = [66,77,54,32,10,5,11,15];

/*
[66,77,54,32,10,5,11,15]
피봇값 : 66
[54,32,10,5,11,15] + [66] + [77]
피봇값 : 54
[32,10,5,11,15] + [54]+ [66] + [77]
피봇값 : 32
[10,5,11,15] +[32] [54]+ [66] + [77]
피봇값 : 10
[5]+[10]+[11]+[15] +[32] [54]+ [66] + [77]
*/

function 퀵정렬(입력배열){
   let 입력배열의길이=입력배열.length;
   if( 입력배열의길이 <= 1){
       return 입력배열
   };

   let 피벗값 = [입력배열.shift()];
   let 그룹하나 = [];
   let 그룹둘 = [];

   for( var i in 입력배열){
       if( 입력배열[i] < 피벗값){
        그룹하나.push( 입력배열[i] )
       }else{
        그룹둘.push( 입력배열[i] )
       }
   }
   console.log( `그룹하나: ${그룹하나}\n 그룹둘: ${그룹둘} \n 피벗값:${피벗값}`)
   return 퀵정렬(그룹하나).concat(피벗값,퀵정렬(그룹둘))

}
console.log(  퀵정렬( 입력값 ) )






© 2017. by isme2n