Algorithm problem - Counting sort, Radix sort

EBinY·2022년 1월 18일
0

AP - Algorithm Problem

목록 보기
34/55

기수정렬

function radixSort(arr) {
  // 
}
// 카운팅 정렬을 학습하고, 기수 정렬을 학습하였음

// 카운팅 정렬은 배열 전체에서 최대값을 찾고, counting arr를 생성하면
// 값 기준으로 조회 시 counting arr의 좌표로의 접근이 가능해진다
// 이후 입력 배열의 값을 기준으로 원소 개수를 업데이트 한다
// 원소 개수를 모두 count했으면 counting arr을 누적합 배열로 변경한다
// [3,1,2,2,4,5] -> 최대값: 5 -> 카운팅배열: [0,0,0,0,0,0]
// 원소 개수를 카운팅하여 업데이트: [0,1,2,1,1,1] -> 누적합: [0,1,3,4,5,6]
// 각 원소는 카운팅 배열의 값 - 1의 인덱스로 위치하게 되고, 위치하게 된 카운팅 배열의 값은 -1처리
// 예로, 0번값인 3을 정렬하면 카운팅 배열의 3번인덱스값인 4가 위치값이 되고
// 4 - 1인 3번인덱스에 위치시키면 된다 -> [-,-,-,3,-,-], 그리고 카운팅 배열의 3번값을 -1 처리
// [0,1,3,3,5,6] => 이후 다음값인 1은 카운팅배열값이 1이고 -1한 0번 인덱스로 위치
// [1,-,-,3,-,-] => 카운팅배열의 1번값을 -1 -> [0,0,3,3,5,6]....이렇게 반복하면 정렬됨
// 최대값을 전체배열을 탐색해야 하므로 O(n)이 소요되고, 출력 배열에 값을 입력하여 얻는 과정도 O(n)
// 그러나 배열의 길이에 상관없이 최대값 k가 정렬의 변수로 작용
// 카운팅정렬의 시간복잡도는 일반적으로 O(n+k)라고 말한다

// 기수 정렬은 각 요소가 가지는 자리수의 값을 비교하여 정렬시키는 방식
// 최초로 1의 자리를 정렬, 그 후 10의 자리, 100의 자리, 1000의 자리를 정렬하여 정렬시키는 방식
// [1,2,43,100,21]을 정렬한다고 가정했을 때, 최초로 1의 자리를 가지고 정렬
// [100,1,21,2,43]이 되고, 10의 자리를 가지고 다시 정렬하면
// [100,1,2,21,43]이 되고, 100의 자리로 다시 정렬하면
// [1,2,21,43,100]이 되면서 정렬이 완성되는 것을 볼 수 있음
// 여기서 각 자리수가 없는 수의 경우, 1의 경우 10의 자리가 없음, 0으로 생각하고 정렬하게 된다

0개의 댓글

관련 채용 정보