1. ホーム
  2. c

[解決済み] C言語で配列の並べ替え?

2022-03-07 14:09:41

質問

次の配列を並べ替えるのに最も適したソート方法はどれか、また重複がある場合はどのように処理するか。

int a= {1,3,6,7,1,2};

また、ソート技術はどれが一番いいのでしょうか?

void BubbleSort(int a[], int array_size)
{
    int i, j, temp;
    for (i = 0; i < (array_size - 1); ++i)
    {
        for (j = 0; j < array_size - 1 - i; ++j )
        {
            if (a[j] > a[j+1])
            {
                temp = a[j+1];
                a[j+1] = a[j];
                a[j] = temp;
            }
        }
    }
}

解決方法は?

C言語では、ビルトインされている qsort コマンドを使用します。

int compare( const void* a, const void* b)
{
     int int_a = * ( (int*) a );
     int int_b = * ( (int*) b );

     if ( int_a == int_b ) return 0;
     else if ( int_a < int_b ) return -1;
     else return 1;
}

qsort( a, 6, sizeof(int), compare )

をご覧ください。 http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/


最適な(比較ベースの)ソートアルゴリズムとは、O(n log(n))の比較で実行されるものです。この特性を持つものはいくつかありますが(クイックソート、マージソート、ヒープソートなど)、どれを使うかはあなたのユースケースに依存します。

余談ですが、データについて知っていれば、O(n log(n))よりも良い結果が得られる場合があります。 基数ソート