BeBreave
2015-07-16 05:09
采纳率: 40%
浏览 1.3k
已采纳

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;
}这条语句求解释

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • danielinbiti 2015-07-16 05:18
    已采纳
     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的值交换
    
    已采纳该答案
    打赏 评论
  • John_ToString 2015-07-16 09:03

    //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)。

    打赏 评论
  • John_ToString 2015-07-16 09:03

    //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)。

    打赏 评论
  • 指月玄光 2015-07-20 04:19

    感觉楼上说的对////、

    打赏 评论

相关推荐 更多相似问题