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
Bài liên quan
Anh nhìn vào đã thấy sai.
Hình như em không chịu chạy debug thì phải.
Hàm hoán vị của bạn sai rồi.
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ỏ
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.
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ứ ?
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
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.
À à 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
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
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
đếnn-1
) để đưa lên vị tríi
.(từ
0
đếni-1
là các phần tử đã ở đúng vị trí của nó rồi).