首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-01-06 
求解,关于选择排序,这是为什么啊啊啊啊啊~~#includestdio.hvoid main(){int i,j,temp,min,a[10]for(i0

求解,关于选择排序,这是为什么啊啊啊啊啊~~
#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判断里面改一下就行了

热点排行