Sắp xếp mảng 2 chiều trong C++

#include <iostream>

using namespace std;

int n, m, a[10][10], b[100], k;

void nhapMang(int a[10][10], int n, int m)
{
    for (int i = 0 ; i < n; i++)
        for (int j = 0; j < m; j++) cin >> a[i][j];
}

void mangB (int a[10][10], int n, int m, int b[100])
{
    k = 0;
    for (int i = 0 ; i < m ; i++)
    {
        for (int j = 0 ; i < n ; j++)
        {
            b[k] = a[i][j];
            k++;
        }
        cout << b[i] << "\t";
    }
}

void sapxep (int b[100], int n, int m)
{
    for (int i = m*n ; i > 0 ; i--)
    {
        for (int j = 0 ; j < i ; j++)
            if (b[j] < b[j + 1])
            {
                int tmp;
                tmp = b[j];
                b[j] = b[j + 1];
                b[j + 1] = tmp;
            }
        cout << b[i] << "\t";
        if (i == n + 2) cout << endl;
    }
}

int main()
{
    cin >> n;
    cin >> m;

    nhapMang(a, n, m);

    cout << "chua sx: " << endl;
    mangB(a, n, m, b);

    cout << "\nda sx: " << endl;
    sapxep(b, n, m);

    return 0;
}

Đoạn code dùng để sắp xếp mảng 2 chiều, em bị mắc lỗi là các hàm khi gọi để dùng thì ko chạy được. Em sửa nhiều lần nhưng vẫn v, mong các anh chị giúp đỡ. Em cảm ơn

j < n: là j không phải i.

Vòng lặp 1: lặp n.
Vòng lặp 2: lặp m.
Lúc nhập như nào thì lúc thao tác cũng như vậy.

  • Bạn không nên xuất ngay khi sắp xếp, mảng lúc đó chưa được sắp xếp hoàn chỉnh.
  • Bạn đang sắp xếp giảm dần do cho vòng lặp chạy ngược.

Sửa hoàn chỉnh:

#include <iostream>

using namespace std;

int n, m, a[10][10], b[100], k;

void nhapMang(int a[10][10], int n, int m)
{
    for (int i = 0 ; i < n; i++)
        for (int j = 0; j < m; j++) cin >> a[i][j];
}

void mangB (int a[10][10], int n, int m, int b[100])
{
    int k = 0;
    for (int i = 0 ; i < n ; i++)
    {
        for (int j = 0 ; j < m ; j++)
        {
            b[k] = a[i][j];
cout << b[k] << "\t";
            k++;
        }
        
    }
}

void sapxep (int b[100], int n, int m)
{
    for (int i = m*n ; i > 0 ; i--)
    {
        for (int j = 0 ; j < i ; j++)
            if (b[j] < b[j + 1])
            {
                int tmp;
                tmp = b[j];
                b[j] = b[j + 1];
                b[j + 1] = tmp;
            }
    }
}

void xuat(int b[100], int n, int m){
for(int i = 0; i < n*m; i++){
cout << b[i] << "\t";
if(i%m==m-1) cout << endl;
}
}

int main()
{
    cin >> n;
    cin >> m;

    nhapMang(a, n, m);

    cout << "chua sx: " << endl;
    mangB(a, n, m, b);

    cout << "\nda sx: " << endl;
    sapxep(b, n, m);
xuat(b,n,m);
    return 0;
}

Chạy thử: https://ideone.com/5uWI8m

3 Likes

mình cảm ơn nhiều ^.^

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?