見出し画像

計数ソート

計数ソートは,ソート対象の配列に出てくる数値の回数をカウンタ配列に記録し,それを用いて出力配列に要素を順番にコピーしていき,ソートされた配列を出力するプログラムである.

計数ソートの特徴

  • 計算量はO(n + k)

  • 安定なソートアルゴリズム

ソースコード

#include <iostream>
using namespace std;

void CountingSort(int arr[] , int n , int range){
    int count[range + 1];
    for(int i = 0; i <= range; i++) count[i] = 0;

    for(int i = 0; i < n; i++) count[arr[i]]++;
    for(int i = 1; i <= range; i++) count[i] += count[i - 1];

    int out[n];
    for(int i = 0; i < n; i++) out[i] = 0;

    for(int i = n - 1; i >= 0; i--){
        out[count[arr[i]] - 1] = arr[i];
        count[arr[i]]--;
    }

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

int main(){
    int n , range = 0;
    cin >> n;

    int A[n];
    for(int i = 0; i < n; i++){
        cin >> A[i];
        if(range < A[i]) range = A[i];
    }

    CountingSort(A , n , range);

    for(int i = 0; i < n; i++) cout << (i ? " " : "") << A[i];
    cout << endl;

    return 0;
}

この記事が気に入ったらサポートをしてみませんか?