30/09/2018, 19:17

Sắp xếp mảng tăng dần ?Ngôn ngữ C

#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MAX 100

void nhap (int a[], int &n)
{
	do
	{
		printf("
Nhap so phan tu: ");
		scanf("%d", &n);
		if(n <= 0 || n > MAX)
		{
			printf("
So phan tu khong hop le. Xin kiem tra lai !");
		}
	}while(n <= 0 || n > MAX);
	for(int i = 0; i < n; i++)
	{
		printf("
Nhap a[%d]: ", i);
		scanf("%d", &a[i]);
	}
}

void xuat(int a[], int n)
{
	for(int i = 0; i < n; i++)
	{
		printf("%4d", a[i]);
	}
	printf("
");
}

void hoanvi(int c,int d)
{
	int temp;
	c=temp;
	c=d;
	d=temp;
}

void sapxeptangdan(int a[],int n)
{
	int i,j;
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(a[i]>a[j])
				hoanvi(a[i],a[j]);
		}
	}
	//Xuat
	for(j=0;j<n;j++)
	{
		printf("%4d",a[j]);
	}
}

int main()
{
	int n;
	int a[MAX];
	nhap(a, n);
	xuat(a, n);
	sapxeptangdan(a, n);
	getch();
	return 0;
}

Mình làm không ra

vũ xuân quân viết 21:32 ngày 30/09/2018

void hoanvi(int c,int d)
{
int temp;
c=temp;
c=d;
d=temp;
}

Anh nhìn vào đã thấy sai.
Hình như em không chịu chạy debug thì phải.

Ngô Doãn Tuấn viết 21:29 ngày 30/09/2018

Hàm hoán vị của bạn sai rồi.

17XGOD viết 21:25 ngày 30/09/2018

góp ý là sau khi bản sửa lại hàm hoán vị cho đúng như mấy bạn ở trên nói nếu mà không ra nữa thì khuyên bạn hãy dùng con trỏ

Đạt Đỗ viết 21:33 ngày 30/09/2018

Hoán vị giá trị thì thua rồi,
1 là trức tiếp trong hàm sắp xếp.
2 dùng con trỏ, tham chiếu đi.

Minh Anh viết 21:33 ngày 30/09/2018
[quote="Johnnguyen2202, post:1, topic:19203"]
}while(n &lt;= 0 || n &gt; MAX);
	for(int i = 0; i &lt; n; i++)
	{
		printf("\nNhap a[%d]: ", i);
		scanf("%d", &a[i]);
[/quote]

Cho mình hỏi một tẹo được k ? nếu bạn viết thế này tức là xét điều kiện của n, nếu n>MAX hoặc n<0 thì bắt đầu nhập giá trị cho các phần tử trong mảng à !?!?
À mà mình nghĩ bạn làm hoán vị kiểu này thì mình nghĩ sẽ k ra được đâu, vì khi bạn hoán vị thì ở đây của bạn chỉ hoán vị giá trị trong hàm hoán vị đó thôi, cụ thể ở đây bạn hoán vị cho biến trung gian là temp, nhưng vì bạn khai báo biến temp đó trong hàm hoán vị nên ra khỏi hàm đó biến temp sẽ biến mất,(biến cục bộ mà) , tất cả các biến được khai báo trong hàm main trước lời gọi hàm và sau lời gọi hàm là k thay đổi, … mà nói chung là dùng con trỏ đi, bạn hiểu ý mình chứ ?

John Nguyen viết 21:27 ngày 30/09/2018

không bạn , nếu n>MAX và n<0 thì cứ là cái dòng ở trên là bắt nhập lại

John Nguyen viết 21:20 ngày 30/09/2018

thanks bạn tại lúc đó chưa học đến con trỏ nên k hiểu bản chất,giờ thì mình hiểu rồi.

Minh Anh viết 21:20 ngày 30/09/2018

À à r xin lỗi bạn, mình k nhìn thấy dấu chấm phẩy ở lệnh while nên hiểu nhầm

Axit Clohidrit Linh viết 21:27 ngày 30/09/2018

cho mình hỏi là tại sao mình lai cho j=i+1 mà không cho một giá trị khác bất kì hay là j=0 chăng hạn

Sáng Béo viết 21:19 ngày 30/09/2018

cho j = i+1 là vì mình sẽ chọn 1 số thích hợp (lớn nhất hoặc nhỏ nhất tùy yêu cầu sắp xếp, trường hợp này thì là số nhỏ nhất) trong các số chưa sắp xếp (từ i đến n-1) để đưa lên vị trí i.
(từ 0 đến i-1 là các phần tử đã ở đúng vị trí của nó rồi).

Bài liên quan
0