Saya sedang menulis algoritma penyortiran ketika saya menemukan kesalahan berikut.

Kode:

int main()
{
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
    int n;
    int a[100];
    cin >> n;
    for (int i = 1; i < n; ++i) {
        cin >> a[i];
    }
    //or use getlinee as getline (cin, fullName);
    int swap_count = 0;
    for (int i = 0; i < n - 1; ++i) {
        if (a[i] > a[i + 1]) {
            swap_count = swap_count + 1;
        }
    }

    if (swap_count != 0) {
        for (int p = n; p > 1; --p) {
            for (int q = 0; q < p - 1; ++q) {
                if (a[q] > a[q + 1]) {
                    int temp_var = a[q];
                    a[q] = a[q + 1];
                    a[q + 1] = temp_var;
                }
            }
        }
    }
    for (int i = 0; i < n; ++i) {
        cout << a[i] << " ";
    }
    return 0;
}

Memasukkan:

3
1 5 2

Keluaran:

1 5 1878000832

Saat mengulangi dengan beberapa nilai, saya menemukan nilai terakhir dari seri sedang dibaca salah.

Apa penyebab masalah ini dan bagaimana cara mengatasinya?

Catatan: Saya tahu ada banyak cara alternatif untuk memasukkan tetapi saya ingin tahu mengapa yang ini tidak berfungsi.

0
Very Useless 18 Mei 2021, 16:42

1 menjawab

Jawaban Terbaik

Anda membaca elemen hanya dari a[1], tetapi pengurutan Anda dimulai dari a[0].

Perubahan

for (int i = 1; i < n; ++i)
{
    cin >> a[i];
}

Untuk

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

Untuk membaca data juga ke a[0].

1
MikeCAT 18 Mei 2021, 13:45