-3

私はソートアルゴリズムをプログラミングしています — Shellsort. バグはどこ?

int shellsort( int ai_numbers[], const int ci_count ){

    int i, j, temp, counter = 0, inc;
    inc = ci_count / 2;

    while ( inc > 0 )
    {
        for ( i = inc + 1; i < ci_count ; i++)
        {
            temp = ai_numbers[i];
            j = i;

            while ( j > inc && ai_numbers[j - inc] > temp )
            {
                ai_numbers[j] = ai_numbers[j - inc];
                j = j - inc;
                counter++;
            }
            ai_numbers[j] = temp;
        }

        inc = (int) (inc / 2.2);
    }
    return counter;
}
4

1 に答える 1

1

内側のループの状態、

while ( j > inc && ai_numbers[j - inc] > temp )

は、アルゴリズムが をまったく見ないようにしai_numbers[0]ます。このアルゴリズムは、1 ベースの配列インデックスを念頭に置いて作成されているようです。

ループコントロールは

for ( i = inc; i < ci_count ; i++)

while ( j >= inc && ai_numbers[j - inc] > temp )

適切に組み込むai_numbers[0]

于 2012-10-29T15:22:19.860 に答える