Sắp xếp mảng không thành công

Đoạn code này của em viết để sắp xếp mảng dùng phương pháp đổi chỗ trực tiếp mà không chạy được ạ, mọi người xem giúp em chỗ nào sai với ạ.

#include <stdio.h>
#include <stdlib.h>
void hoanDoi(int *b, int *c);
void sapXepArray(int A[], int *kichThuoc);

int main()
{
    int A[100];
    int i, n;
    printf("Nhap vao so phan tu cua mang: ");
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        A[i] = rand()%(9+1);
    }
    for(i=0; i<n; i++)
    {
        printf("A[%d] = %d    ", i, A[i]);
    }
    sapXepArray(A,&n);
    printf("Mang sau khi duoc sap xep:\n");
    for(i=0; i<n; i++)
    {
        printf("A[%d] = %d\n", i, A[i]);
    }
    return 0;
}

void hoanDoi(int *b, int *c)
{
    int temp;
    temp = *b;
    *b = *c;
    *c = temp;

}

void sapXepArray(int A[], int *kichThuoc)
{
    int i,j;

    for(i=0; i<*kichThuoc-1; i++)
    {
        for(j=i+1; j<*kichThuoc; j++)
        {
            if(A[j] < A[i])
            {
                hoanDoi(A[j],A[i]);
            }
        }
    }

}

Mong mọi người giúp đỡ! Em cám ơn nhiều ạ.

Đúng là C :smiley: chắc là crash rồi.

A[i] với A[j]int mà.

2 Likes

merged and moved by noname00

1 Like

Em sửa thành:
hoanDoi( *(A + j), *(A+i) );
Như thế này không biết đúng không ạ.
Kết quả nó vẫn không chạy hàm sapXepArray luôn ạ :cry:

Mình thấy có gì khác nhau đâu :smiley:

2 Likes

Em mới học về con trỏ ạ :sob:
Giúp em giải quyết với ạ.
=((

Chắc gặp con trỏ với mảng bạn hơi rối. Vậy giả sử bây giờ bạn ko truyền 2 thành phần trong mảng, mà truyền 2 biến a và b vào hàm hoán đổi thì bạn sẽ truyền như thế nào

int a = 10;
int b = 20;
hoanDoi(...);
4 Likes
hoanDoi( int b, int c)
{
     int temp;
     temp = b;
     b = c;
     c = temp;
}
...
   hoanDoi( A[j] , A[i] );

Như này đc ko ạ?

Không phải, ý mình là hàm hoan đổi ko thay đổi gì.
Nhưng thay vì truyền a[i], a[j] thì bạn thay bằng a và b thì bạn sẽ truyền như thế nào?

hoanDoi(a, b);
// hay
hoanDoi(&a, &b);
4 Likes

Hàm nhận vào con trỏ thì bạn đưa địa chỉ 2 biến A[j], A[i] vào là ngon lành thôi nhé

hoanDoi(&A[j], &A[i]);

Một ví dụ khác nhận vào con trỏ trong chương trình của bạn là ở ngay lệnh scanf, bạn đưa cho nó địa chỉ của n, từ đó scanf mới có thể thay đổi giá trị của n được

scanf("%d", &n);
2 Likes

hàm hoanDoi(int* b, int* c) của bạn nhận vào 2 con trỏ mà, bạn truyền vào A[i], A[j] hay *(A+i), *(A+j) -> đều là truyền giá trị.
bạn thử truyền như này xem (A+i), (A+j) :sunglasses:

1 Like

Dạ em đã hiểu được vấn đề rồi ạ. Em cám ơn mọi người nhiều nha :kissing_closed_eyes: ^^

Em cảm ơn mọi người đã giúp đỡ ạ, cám ơn mọi người rất nhiều!!
image
^^

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