0

2回目は配列を出力しません。

bubbleSort( ... ) の呼び出しを削除すると機能します。

理由がわかりません...このタイプの動作は決して起こらないのに、エグゼキュータが2番目の呼び出しをprintArray( ... )にジャンプするのはなぜですか?

助言がありますか?

#include <iostream>
#include <cstdlib>
using namespace std;

// STRUCT
struct Array
{
    int * data;
    unsigned int size;
};

// PROTYPES
void printArray( Array & );
void bubbleSort( Array & );

// MAIN
int main(int argc, char **argv)
{
    Array array;

    array.size = 10;
    array.data = new int [ array.size ];

    for ( unsigned int i = 0; i < array.size; ++i )
        array.data[ i ] = rand() % 10;

    printArray( array );
    bubbleSort( array );
    printArray( array );


    return 0;
}

void printArray( Array & array )
{
    for ( unsigned int i = 0; i < array.size; ++i )
        cout << array.data[ i ] << ' ';

    cout << endl;
}

void swap( int & m, int & n )
{
    int temp = m;
    m = n;
    n = temp;
}

void bubbleSort( Array & a )
{
    for ( unsigned int i = 0; i < a.size - 1; ++i )
        for ( unsigned int j = a.size - 1; j >= i; --j )
            if ( a.data[ j-1 ] > a.data[ j ] )
                swap( a.data[ j-1 ], a.data[ j ] );

}
4

1 に答える 1

2

符号なしのデータ型には注意してください。ある時点で "i" は 0 になり、常に true である "j>=0" をチェックします。したがって、無限ループを作成します。

于 2013-03-04T18:24:54.637 に答える