30/09/2018, 23:32

Hỏi về : Gộp 2 mảng có sắp xếp tăng dần thành 1 mảng sắp xếp tăng dần

Em đang làm cái hàm trộn 2 mảng có sắp tăng dần thành 1 mảng sắp xếp tăng dần. Nhưng mà lại không ra được cái giá trị của mảng. Lần nào xuất ra cũng thiếu 1 phần tử. Bác nào chỉ giúp e hàm em viết sai chỗ nào.

void GopHaiMangTangDan(int a[], int nA, int b[], int nB, int result[], int &nResult)
{
    // dua a,b vào ket qua
    nResult = 0; // Khoi tao ban dau bang khong nA= 4 nB = 5 iA=4 iB=4
    int iA = 0;
    int iB = 0;
    while ((iA < nA) && (iB < nB))
    {
        if (a[iA] > b[iB])
        {
            result[nResult] = b[iB];
            iB++;
        }
        else
        {
            result[nResult] = a[iA];
            iA++;
        }
        nResult++;
    }
}
Hưng Lê viết 01:40 ngày 01/10/2018

Bạn dùng while ((iA < nA) && (iB < nB)) nên khi một trong 2 mảng chạy đến phần tử cuối cùng thì nó sẽ kết thúc, do đó những phần tử còn lại của mảng kia sẽ không được xử lý.

Có nhiều cách giải quyết, một trong số đó là thêm 2 câu lệnh if và sau vòng while:

if (iA < nA) { /* gộp những phần tử còn lại của mảng A */ }
if (iB < nB) { /* gộp những phần tử còn lại của mảng B */ }
Chi Bảo viết 01:45 ngày 01/10/2018

Không phải điều kiện và thì khi cả 2 vượt quá thì mới dừng vòng while chứ ạ

Gió viết 01:42 ngày 01/10/2018

vòng while dừng lại khi một trong hai mảng A, B hết. Như thế một trong 2 mảng còn lại vẫn còn phần tử. lúc đó cần copy mảng nào còn lại cho vào result

while(iA < nA) result[nResult++]=a[iA++];
while(iB < nB) result[nResult++]=b[iB++];
Bài liên quan
0