c语言选择排序求大家为我解答下( )

main()
{int a[10]={1,3,5,7,9,2,4,6,8,0};
int i,j,k,t;
for(i=1;i<10;i++)
{k=0;
for(j=1;j<=10-i;j++)
if(a[k]<a[j])
k=j;

t=a[k];
a[k]=a[10-i];
a[10-i]=t;}

for(i=0;i<10;i++)
printf("%d ",a[i]);
}
我现在有个疑惑为什么选择排序一定要找他们的下标呢?他先找到最大值就直接和最后一个交换不就得了吗?然后以此类推啊
main()
{int a[10]={1,3,5,7,9,2,4,6,8,0};
int i,j,max,t;
for(i=1;i<10;i++)
{max=a[0];
for(j=1;j<=10-i;j++)
if(max<a[j])
max=a[j];

t=max;
max=a[10-i];
a[10-i]=t;}

for(i=0;i<10;i++)
printf("%d ",a[i]);
}
我按照下面写就是错的

是要找到最大值之后和最后一个元素交换,
但是你交换时需要知道最大值在数组中的下标啊,这就必须用一个变量来记录最大值在数组中的下标才行,
不然你无法确定数组哪个元素与最后一个元素交换

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

不行啊,必须将最大值所在的元素换成当前元素啊。需要找到最大值元素的下标,将这个元素与外层循环当前的比较元素进行交换