0

それが私の機能です:

int main() {
    double data[100];

    int num;

    cout<<"num= ";
    cin>>num;

    for(int i = 1; i <= num; i++) {
        cout<<i<<" element = ";
        cin>>data[i];
    }

    Sort(data, num);

    for (int i = 1; i <= num; i++) {
        cout<<data[i]<<endl;
    }

    return 0;
}

void Sort(double data[], int n) {
    int i,j,k;
    double min;

    for(i = 0; i < n-1; i++) {
        k = i;
        min = data[k];

        for(j = i+1; j < n; j++)
            if(data[j] < min) {
                k = j;
                min = data[k];
            }
        data[k] = data[i];
        data[i] = min;
    }
}

私が経験のために書いた場合。3 つの要素: 8,9,1 再び 8,9,1 を数えますか?

4

3 に答える 3

1
for(int i = 1; i <= num; i++) { // WRONG

私はあなたが意味すると思います:

for(int i = 0; i < num; i++) { // RIGHT

Cの配列は、0インデックスの記憶です。

于 2012-09-27T01:43:39.867 に答える
1

並べ替え機能は問題ありません。唯一の問題は、関数の両方のループで、を含む位置1に要素を入力するn一方で、を含むを使用する必要が0あることです。n-1main()

1を介して数字を印刷する必要がある場合はn

cout<<(i+1)<<" element = ";
于 2012-09-27T01:47:45.407 に答える
1

forループの0インデックス開始に慣れる必要があります for(int i = 0; i < N; ++i)

したがって、これら 2 つのインデックス エラーを修正すると、コードが正しく実行されます。

その理由は:

data[]最初にusingにデータを書き込む1と、データ配列の最初の項目は乱数になります。

3 つの要素を挿入すると、配列は次のようになります。

data[0] = ??? // maybe a very very big number
data[1] = 8
data[2] = 9
data[3] = 1

また、Sort 関数では、インデックスは 0 で始まり、 の前numで終了します。つまり、コードは sort のみを意味しますdata[0], data[1], data[2]

原点コードの入力データとして num = 3, 3 2 1 を使用すると、3 と 2 がソートされていることがわかります。

あなたのソートコードはどこかからグーグルで検索されていると思います。理解してみてください。

優れたオンライン アルゴリズム コース: https://www.coursera.org/course/algs4partI

非常に優れたアルゴリズムのオンライン ブック: http://algs4.cs.princeton.edu/home/

ところで、for(j = i+1; j < n; j++)中括弧Sortがあれば関数内でより良いでしょう。{ }

于 2012-09-27T02:04:13.877 に答える