HackerRank/Algorithms

[HackerRank] Sorting > Counting Sort 2

ruming 2021. 9. 12. 18:12

숫자들을 크기순으로 정렬하고 출력하면 된다.

다만 counting sort 1처럼 100크기의 배열을 만들어 숫자가 각각 몇 개 있는지 세고, 그 개수만큼 출력하면 된다.

 

n의 범위가 0이상 1000000이하인 것에 주의한다.

int* countingSort(int arr_count, int* arr, int* result_count) {
    *result_count=arr_count;
    static int rArr[100] = {0}, ret[1000000] = {0};
    int i, j, seq=0;
    for(i=0; i<arr_count; i++){
        rArr[arr[i]]++;
    }
    for(i=0; i<100; i++){
        if(rArr[i]){
            for(j=0; j<rArr[i]; j++){
                ret[seq] = i;
                seq++;
            }
        }
    }
    return ret;
}

숫자의 개수를 저장할 rArr배열에 100을 할당하고, 결과를 저장할 ret배열에 1,000,000을 할당했다.

for문으로 rArr에 arr의 숫자의 개수를 저장한다.

rArr에 있는 개수만큼 ret에 해당 수를 저장해야 되는데, i, j와 상관없이 계속 증가되는 인덱스를 어떻게 설정해야 될 지 몰라 seq라는 변수를 만들어 직접 세줬다. 마지막으로 ret를 반환한다.