Lỗi sắp xếp mảng theo thứ tự giảm dần

Mọi người chỉ chỗ sai em với ạ. Em chạy code nó không chạy ham sapXepMang().

#include<stdio.h>
#include<math.h>
void nhapMang(int a[],int n){
	int i;
	for(i=0;i<n;i++){
		printf("nhap a[%d]: \n",i);
		scanf("%d",&a[i]); 
	} 
} 
void xuatMang(int a[],int n){
	int i; 
	for(i=0;i<n;i++){
		printf("gia tri thu a[%d] la:%d \n",i,a[i]);
	}
} 
void sapXepMang(int a[],int n){
	int i,j,temp;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(a[i]>a[j])
			temp=a[i];
			a[i]=a[j];
			a[j]=temp;		
		}
	}
} 
main(){
	int n;
	printf("nhap SL pTu : \n");
	scanf("%d",&n);
	int a[n];
	nhapMang(a,n);
	xuatMang(a,n);
	sapXepMang(a,n);
}

(post withdrawn by author, will be automatically deleted in 24 hours unless flagged)

(post withdrawn by author, will be automatically deleted in 24 hours unless flagged)

Sao mà bạn biết hàm sapXepMang() không chạy???


  1. Sắp xếp bằng 2 vòng for, vòng for bên trong sẽ chạy từ đâu? 0 hay i+1?
  2. Cặp dấu ngoặc nhọn ({}) sau if!
  3. Thứ tự gọi hàm!
5 Likes

Chuẩn. Bổ sung thêm chỗ i=0->n-1 ạ.

void sapXepMang(int a[],int n){
	int i,j,temp;
	for(i=0;i<n-1;i++){
		for(j=i+1;j<n;j++){
			if(a[i]>a[j]) {
			temp=a[i];
			a[i]=a[j];
			a[j]=temp;
            }
		}
	}
}

Gọi lại hàm xuatMang sau khi sắp xếp bạn nhé.

3 Likes

em chạy nó chỉ thực hiện lệnh trong 2 hàm nhapMang(a,n);
xuatMang(a,n); nên em nghĩ nó không chạy hàm sapXepMang()

@nhimxu vâng em sẽ bổ sung ạ
cảm ơn ạ

sapXepMang() của em nó chỉ sắp xếp các phần tử thôi nên em muốn nhìn thấy cái mảng sau khi sắp xếp thì gọi tiếp xuatMang() phía cuối của chương trình

2 Likes

Kinh nghiệm là: bạn hãy cho thêm vài dòng printfln(“Một thông báo bất kỳ nào đó”);
vào những vị trí nào mà bạn đang nghi ngờ chương trình không chạy đến?

4 Likes

Dùng breakpoint + step sẽ dễ dàng hơn.

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