Sắp xếp nổi bọt trong mảng 2 chiều C

các ac xem giúp em với ạ. Sắp xếp theo thư tự tăng dần trên từng hàng, nhưng run nó không ra đúng ạ =(((((

#include <stdio.h>
int main(int argc, char** argv) {
    int a, b, i, j, tg;
    printf("Nhap so hang: ");
    scanf("%d", &a);
    printf("Nhap so cot: ");
    scanf("%d", &b);

    int arr[a][b];
    for (i = 0; i < a; i++) {
        for (j = 0; j < b; j++) {
            printf("- Nhap arr[%d][%d] = ", i, j);
            scanf("%d", &arr[i][j]);
        }
    }
    // ma tran vuong
    if (a == b) {
        for (i = 0; i < a; i++) {
            for (j = 0; j < b; j++) {
                printf("%3d", arr[i][j]);
            }
            printf("\n");
        }
    }
    // sap xep tang dan theo tung hang   

    for (i = 0; i < a; i++) {
        for (j = 0; j < b - 1; j++) {
            if (arr[i][j] > arr[i][j + 1]) {
                tg = arr[i][j];
                arr[i][j] = arr[i][j + 1];
                arr[i][j + 1] = tg;
            }
        }
    }
    printf("Sau khi sap xep: \n");
    for (i = 0; i < a; i++) {
        for (j = 0; j < b; j++) {
            printf("%3d", arr[i][j]);
        }
        printf("\n");
    }
    getch();
}

Sắp xếp nổi bọt cho mảng 1 chiều cần 2 vòng for phải không nhỉ? Mình chẳng nhớ nữa.

3 Likes

@SITUVN.gcd: Đúng rồi, Buble sort cần 2 vòng for lồng nhau, vì vậy phần mã sắp xếp cần 3 vòng for :

for (i = 0; i < a; i++) { // xét mỗi hàng trong ma trận
    for (j = 0; j < b - 1; j++) { // trên cùng một hàng, xét mỗi phần tử
        for (k = 0; k < b - j - 1 ; k++) { // và so sánh với các phần tử còn lại trong hàng
            if (arr[i][k] > arr[i][k + 1]) { // và hoán đổi vị trí nếu có phần tử nhỏ hơn
                tg = arr[i][k];
                arr[i][k] = arr[i][k + 1];
                arr[i][k + 1] = tg;
            }
        }
    }
}

Phần còn lại là tại sao tôi sử dụng các điều kiện j < b - 1k < b - j - 1 thì @Vuong_T_Thuy chịu khó tìm hiểu nhé.

5 Likes

Bác dùng 8 spaces. :question: :grey_question: :question: :grey_question:

2 Likes

8 spaces gì vậy ạ ???

Câu đó là reply cho thaipt mà.

4 Likes

Là indent code dùng 8 dấu cách. :slight_smile:

3 Likes

@Sherly1001: Tôi đã sửa lại, lúc trả lời đang vội nên không để ý. Cảm ơn bạn.

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