Sort3

Counting Sort

  • n개의 정수를 정렬(단 정수는 0 ~ k 사이의 수)
    • example)
      • 위 문제를 해결한 Version
        • Step1)
        • Step2)
        • Step3)
        • Step4)
  • pseudo code)
CountingSort(A, B, k)
    // - 요소 개수 구하기 - 
    for i <- 0 to k do C[i] <- 0 // k번 반복
    for j <- 1 to length[A] do C[A[j]] <- C[A[j]] + 1 // length of A == N번 반복
    //   --> C[i] now contains the number of elements equal to i
    
    // - 누적 합 구하기 - 
    for i <- 1 to k do C[i] <- C[i] + C[i-1] // K번 반복
    //   --> C[i] now contains the number of elements less than or equal to i
    
    // - 배열 정렬 - 
    for j <- length[A] downto 1 do B[C[A[j]]] <- A[j]
                                   C[A[j]] <- C[A[j]]-1
                                   
    // - 시간 복잡도 - 
    //   O(k + n) 또는 O(n) -> n > k 이기때문
    //   k가 아주 크다면 비실용적, Stable sort Algorithm --> 입력에 먼저 나오는 값이 출력에도 먼저 나옴

Radix Sort

  • n개의 d자리 정수들 이라는 가정이 있다.(길이가 같다는 의미)
  • 가장 낮은 자리수부터 정렬
    • example)
  • pseudo code)
RadixSort(A, d) // A: 배열, d: 자리수
    for i <- 1 to d use a stable sort to sort array A on digit i
    
    // - 시간 복잡도 - 
    //   O(d(n+k))
    //      * d: 자리수 만큼
    //      * n+k: counting sort 시간 만큼

Problem

You might also enjoy