c语言选择排序法?
int main()
{
int a[6],max,min,i,j,ma,mi,t,mid;
for(i=0;i<6;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<3;i++)
{
min=a[i];
max=a[i];
for(j=i,mi=i,ma=i;j<6-i;j++)
{
if(a[j]<min)
{
min=a[j];
mi=j;
}
if(a[j]>max)
{
max=a[j];
ma=j;
}
}
t=a[i];
a[i]=a[mi];
a[mi]=t;
mid=a[5-i];
a[5-i]=a[ma];
a[ma]=mid;
}
for(i=0;i<6;i++)
{
printf("%d",a[i]);
printf(" ");
}
return 0;
}
哪里出错了??像1 2 4 3 5 6就不行,而有些就可以。。。。 展开
#include<stdio.h>
int main()
{ int a[6],max,min,i,j,ma,mi,t,mid;
for(i=0; i<6; i++)
{ scanf("%d",&a[i]);
}
for(i=0; i<3; i++)
{ min=a[i];
max=a[i];
for(j=i,mi=i,ma=i; j<6-i; j++)
{ if(a[j]<min)
{ min=a[j];
mi=j;
}
if(a[j]>max)
{ max=a[j];
ma=j;
}
}
t=a[i];
a[i]=a[mi];
a[mi]=t;
if(ma==i)ma=mi; //增加了这一行
mid=a[5-i];
a[5-i]=a[ma];
a[ma]=mid;
}
for(i=0; i<6; i++)
{ printf("%d",a[i]);
printf(" ");
}
return 0;
}
一般不采用这样的办法来进行选择排序。因为如果使用这种方法排序的话,当最大值就在一开头的位置,当你把最小值交换到最前头的时候,原先的最大值就被更换位置,不再是原来的地方了,新增加的这一句话就是更改这个新的最大值所在的位置。
#include<stdio.h>
int main()
{
int a[6],max,min,i,j,ma,mi,t,mid;
for(i=0;i<6;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<3;i++)
{
min=a[i];
max=a[i];
for(j=i,mi=i,ma=i;j<6-i;j++)
{
if(a[j]<min)
{
min=a[j];
mi=j;
}
if(a[j]>max)
{
max=a[j];
ma=j;
}
}
t=a[i];
a[i]=a[mi];
a[mi]=t;
if(ma==i) ma=mi;
mid=a[5-i];
a[5-i]=a[ma];
a[ma]=mid;
}
for(i=0;i<6;i++)
{
printf("%d",a[i]);
printf(" ");
}
return 0;
}
你的程序出现了鬼打墙现象,当ma本身最大的时候,被mi偷偷换掉了!加粗部分注意