问题描述
- c语言的问题求大神的指导!!!
-
#include"stdio.h"
main()
{
int a[10],i,j,k;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%5d",a[i]);
for(i=0;i<10;i++)
for(j=0;j<10;j++)
if(a[i]<a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
for(i=0;i<10;i++)
printf("%5d",a[i]);
}我明明是想编从大到小为什么这是从小到大 if(a[i]<a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}这条语句求解释
解决方案
for(j=0;j<10;j++)
改成
for(j=i;j<10;j++)
k=a[i];//把i位置的值给临时变量k
a[i]=a[j];//把j位置的值给位置i
a[j]=k;//把临时变量K的值给位置j,实现位置i,j的值交换
解决方案二:
//csdn
#if 1
#include
void main()
{
int a[10],i,j,k;
for(i=0;i<10;i++)
scanf_s("%d",&a[i]);
puts("");
for(i=0;i<10;i++)
for(j=0;j<10;j++)
if(a[i]<a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
for(i=0;i<10;i++)
printf("%2d",a[i]);
}
#endif
首先,你的第一个问题:你代码写的就是从小到大排列,if(a[i]<a[j])交换的。
以上解答仅仅是提高了效率,但是牺牲了空间,当你的数据为升序的时候,空间效率接近O(n2)。
解决方案三:
//csdn
#if 1
#include
void main()
{
int a[10],i,j,k;
for(i=0;i<10;i++)
scanf_s("%d",&a[i]);
puts("");
for(i=0;i<10;i++)
for(j=0;j<10;j++)
if(a[i]<a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
for(i=0;i<10;i++)
printf("%2d",a[i]);
}
#endif
首先,你的第一个问题:你代码写的就是从小到大排列,if(a[i]<a[j])交换的。
以上解答仅仅是提高了效率,但是牺牲了空间,当你的数据为升序的时候,空间效率接近O(n2)。
解决方案四:
感觉楼上说的对////、