30/09/2018, 16:38
Chương trình sắp xếp một mảng theo thứ tự tăng dần sau khi đã loại bỏ các phần tử trùng nhau
Đề bài yêu cầu viết chương trình như tiêu đề. Còn đây là code mà mình đã làm
#include <stdio.h>
#include <conio.h>
void Nhap(int a[],int n)
{
int i;
for (i=0;i<n;i++)
{
printf("Phan tu thu %d: ",i+1);
scanf("%d",&a[i]);
}
}
void Inmang(int a[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d",a[i]);
printf("
");
}
void Sapxep(int a[],int n)
{
int t,i,j;
for(i=0;i<n-1;i++)
for(j=1;j<n;j++)
if (a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
void Xoa(int a[],int n)
{
for(int i=0; i<n-1 ; i++)
for(int j= i + 1; j < n; j++)
if(a[i] == a[j])
{
for(int k = j; k < n; k++)
a[k-1] = a[k];
n--;
}
}
int main()
{
int b[20],n;
printf("So phan tu thuc te cua mang N= ");
scanf("%d",&n);
Nhap(b,n);
printf("Mang vua nhap: ");
Inmang(b,n);
Xoa(b,n);
Sapxep(b,n);
printf("Mang sau khi sap xep: ");
Inmang(b,n);
getch();
return 0;
}
http://codepad.org/PePiSxfW
Mọi người giúp mình với. Hàm xóa có bị sai chỗ nào ko
Bài liên quan
K chạy từ j+1 chứ.
Theo mình bỏ cái for(k=…) đi. Khi xoá chỉ cần swap(a[j],a[n-1]) và giảm n thôi. Không cần phải giữ thứ tự mảng như ban đầu(cũng bị sắp xếp lại). Nó sẽ chạy nhanh hơn
GIẢ sử mảng có 10 phần tử thì ta sẽ dùng 9 cặp so sánh. Sau mỗi lần so sánh ta giảm đi 1 cặp…