c++问题(排序问题)

来源:百度知道 编辑:UC知道 时间:2024/06/01 06:34:45
#include <stdio.h>
void main()
{
int i,j,a[10],t,min;
printf("请输入10个数:\n");
for(i=0;i<10;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
for(i=0;i<9;i++)
{
min=i;
for(j=i+1;j<10;j++)
if(a[min]>a[j])
{
min=j;
t=a[i];
a[i]=a[min];
a[min]=t;
}
}
printf("这些数从小到大排序为:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}
这是个数排序,从小到大。请问高手这个程序有什么问题?为什么输入10,1,2,3,4,5,6,7,8,9结果为2,3,4,5,6,7,8,9,1,10?
能详细说下这个程序的问题所在吗?

首先解释原因,因为双重循环中有这样的一句代码 min=i;

如果仅仅是实现排序,对于数量不多的数元素,可以简单点:
for(i = 0;i<9;i++)
{
for(j = i+1;j<10;j++)
if(a[i]>a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}

我帮你改了一下,可以了。
#include <stdio.h>
void main()
{
int i,j,a[10],t;
printf("请输入10个数:\n");
for(i=0;i<10;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
for(i=0;i<9;i++)
{

for(j=i+1;j<10;j++)
if(a[i]>a[j])
{

t=a[i];
a[i]=a[j];
a[j]=t;
}
}
printf("这些数从小到大排序为:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}

#include <stdio.h>
void main()
{
int i,j,a[10],t,min;
pr