CS/Algorithm

[Algorithm]Counting Sort

NeNemEee 2023. 4. 10. 04:17
728x90

특징

  • 메모리 사용이 많음
  • 시간복잡도 O(n)
#include<iostream>

int countingSort(int*arr, int n);

int main(){
    int arr[10] = {10, 9, 8, 7, 6, 5,4,3,2,1};
    countingSort(arr, 10);
    for(int i =0; i<10; i++){
        printf("%d ", arr[i]);
    }

    return 0;
}

int countingSort(int*arr, int n){
    int max=0;

    for(int i=0; i<n; i++){
        if(max<arr[i]){
            max = arr[i];
        }
    }

    int*count = new int[max+1];

    for(int i=0; i<max+1; i++){
        count[i]=0;
    }

    for(int i=0; i<n; i++){
        count[arr[i]]++;
    }

    for(int i=1; i<max+1; i++){
        count[i] = count[i] + count[i-1];
    }
    int*ans = new int[n];
    for(int i=0; i<n; i++){
        ans[count[arr[i]]-1]=arr[i];
        count[arr[i]]--;
    }



    for(int i=0; i<n; i++){
        arr[i] = ans[i];
    }

    delete[] ans, count;

    return 0;
}
728x90