algorithm - 지수- 정렬

김린네·2022년 3월 8일

퀵정렬
너무 어려워서 포기함 ㅋ

다시 생각해봐야되겟다

지수정렬이란?

일의자리 숫자 십의자리숫자 백의자리숫자--->

이런식으로 서로 비교 하면서 스택에 쌓은다음-> 하나로 합친다음-> 다시 비교! 해서
결국은 ! 배열 하나를 만드는 것이다!!!

선생님이 일반적인 방법으로 숫자를 구하는 식을 알려줬지만 나만의 방식으로 하고 싶어서
하다 보니까 진도가 좀 밀리게 됬다.!!!

결국 -> 숫자-> 문자-> split 으로 나눔-> 다시 숫자 -> 배열로 만든다음
->splice 함수를 사용하여 배열 앞의 수를 다 지우고 나올수 있는 부분만 나오게
만듬!

🚗 알려준 방식 !🚗


  var bucket = Array.from({ length: 10 }, () => []
        );
        

배열을 만들어서 반환한다. 이때 길이는 10 으로 하고 안에는 비어 있게 만듬!

🛴알려준 방식 !🛴

arr = [].concat(...bucket);

새로운 배열을 만들어서 bucket 안에 있는 것과 합치기 <<
하나씩 빼는게 아니라 하나로 합친다는것이 중요하다.!


 const check_arr = function (arr, index) {


   var num = arr.toString().split('');
   //  console.log(num)
   const at = num.map(v => {
       return parseInt(v)
   })
   var max = at.length - index;
   if (max < 0) {
       return 0;
   }
   //console.log(max)
   else if (max >= 0) {
       at.splice(0, max);
       return (at[0]);
   }




}

const max_len = function (arr) {
   var max = 0;

   for (var i = 0; i < arr.length; i++) {
       max = Math.max(arr[i], max);
   }


   return max.toString().length



}

const arr_list = function (arr) {

   var max = max_len(arr);
   //console.log(max)
   var num = [];
   for (var i = 0; i < max; i++) {
       var bucket = Array.from({ length: 10 }, () => []
       );
       //  console.log(arr[i])
       for (var zz = 0; zz < arr.length; zz++) {
           var num = check_arr(arr[zz], i + 1)
           if (num >= 0) {
               //  console.log(num)
               bucket[num].push(arr[zz]);

           }
           //console.log(`${arr[zz]} 의 ${i + 1} 의 ${num}`);
       }
       console.log(bucket)

       arr = [].concat(...bucket);

       console.log(arr)
   }

}
arr_list([23, 345, 5467, 12, 2345, 9852])
profile
디자인 > https://dribbble.com/jongpil_77 코딩 > https://www.codewars.com/users/bikijjang

0개의 댓글