读书人

求解关于抉择排序这是为什么啊

发布时间: 2013-01-06 15:44:47 作者: rapoo

求解,关于选择排序,这是为什么啊啊啊啊啊~~
#include<stdio.h>
void main()
{
int i,j,temp,min,a[10];
for(i=0;i<=9;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
for(i=0;i<=9;i++)
{
printf("%5d",a[i]);
}
printf("\n");
for(i=0;i<=8;i++)
{
min=i;
for(j=i+1;j<=9;j++)
{
if(a[min]<a[j])
{
min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}

}
printf("\n");

for(i=0;i<=9;i++)
{
printf("%5d",a[i]);
}
printf("\n");
}




两次执行的结果如下:请问这是为什么?????

求解,关于抉择排序,这是为什么啊求解,关于抉择排序,这是为什么啊

程序的问题在哪儿,为什么会导致这种结果???
[解决办法]


#include<stdio.h>
void main()
{
int i,j,temp,min,a[10];
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
}

for(i=0;i<=9;i++)
{
printf("%5d",a[i]);
}
printf("%s\n","------------------------------转换后----------------------------------");
for(i=0;i<=8;i++)
{
min=i;
for(j=i+1;j<=9;j++)
{ // 注意for括号位置
if(a[min]<a[j])
{
min=j;
}
}
if(i!=min)
{
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
for(i=0;i<=9;i++)
{
printf("%5d",a[i]);
}
printf("\n");
}


[解决办法]
在交换排序中用了过多的变量,以至于变换换乱了。修改后的代码如下:
int i,j,temp,a[10];
for(i=0;i<=9;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
for(i=0;i<=9;i++)
{
printf("%5d",a[i]);
}
printf("\n");

for(i=0;i<=8;i++)
{
for(j=i+1;j<=9;j++)
{
if(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
printf("\n");

for(i=0;i<=9;i++)
{
printf("%5d",a[i]);
}
printf("\n");

[解决办法]
#include<stdio.h>
void main()
{
int i,j,temp,min,a[10];
for(i=0;i<=9;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]); //你入
}


for(i=0;i<=9;i++)
{
printf("%5d",a[i]); //把你入的重新出。第一行出的
}

printf("\n");

// 下面排序你入的
for(i=0;i<=8;i++)
{
min=i;
for(j=i+1;j<=9;j++)
{
if(a[min]<a[j]) //你是大的放前面


{
min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}

}
printf("\n");

for(i=0;i<=9;i++)
{
printf("%5d",a[i]); //出排好序的
}
printf("\n");
}
[解决办法]
http://blog.csdn.net/morewindows/article/details/7961256
[解决办法]
给你的排序修改了一下
你是看书上的选择排序吧
其实书上的是有错误的
给你修改了一下
主要就是对于交换起点的控制,你这里的min如果是交换了的话,min的位置就不再是i了,而是j了,但是我们要进行比较的还是从i开始继续往后比较的,但是你写的就不是了,而是j了(书上也是这样)

下面是我修改的


你这个是降序排列的,如果想变换顺序直接在if判断里面改一下就行了

读书人网 >C语言

热点推荐