Cải tiến này dựa trên ý tưởng của Lâm Nhân lớp LT02b. He he nếu có vi phạm bản quyền thì cho mình sr nha.
PS: với lại bài này vẫn còn nhiều chỗ chưa được tối ưu nên mong các bạn đóng góp thêm ý kiến để thuật toán hoàn thiện
Mã:
#include<stdio.h>
#include<conio.h>
void in(int a[40],int n)
{
printf("\n");
for(int i=1;i<=n;i++)
printf("%3d",a[i]);
}
void main()
{
clrscr();
int a[40],n,i,j,k,m,temp,x,max,min,temp2;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
in(a,n);
printf("\nSau khi sap xep:\n");
temp2=temp3=n;
for(i=1;i<=n/2;i++)
{
max=min=a[i];
k=m=i;
for(j=i+1;j<=temp2;j++)
{
if(max<a[j])
{
max=a[j];
k=j;
}
if(a[j]<min)
{
min=a[j];
m=j;
}
}
if(a[i]==max&&a[temp2]==min)
{
a[i]=min;
a[temp2]=max;
}
else
if(a[i]==max&&a[temp2]!=min)
{
a[i]=a[temp2];
a[temp2]=max;
a[m]=a[i];
a[i]=min;
}
else
{
a[m]=a[i];
a[i]=min;
a[k]=a[temp2];
a[temp2]=max;
}
temp2--;
}
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
in(a,n);
getch();
}