| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 601 人关注过本帖
标题:大家帮我解释一下这个程序!
只看楼主 加入收藏
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
结帖率:89.66%
收藏
已结贴  问题点数:20 回复次数:9 
大家帮我解释一下这个程序!
这是一个用选择法排序的问题,我不能理解,希望大家帮我解释下!谢谢了!!
  #include <stdio.h>
  void main()
   {void sort(int array[],int n);
   int a[10],i;
  printf("please enter the array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted array:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}
void sort(int array[],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
 for(j=i+1;j<n;j++)
if(array[j]<array[k])
  k=j;
 t=array[k];array[k]=array[i];array[i]=t;
}
}
搜索更多相关主题的帖子: 解释 
2010-04-07 21:24
何少仪
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:91
专家分:170
注 册:2010-3-6
收藏
得分:2 
//你写的太换乱拉,很显然是从小到大输出的,这样写就好理解啦。。
void sort(int array[],int n)
{
int num;int i,j;
for(i=0;i<n-1;i++)
 for(j=i+1;j<n;j++)
if(array[i]>array[j])
{num=array[i];
array[i]=array[j];
array[j]=num;}
}

[b] 你要有勇气去听从你直觉和心灵的指示,所有其他的事情都是次要的。
2010-04-07 22:38
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:2 
代码也写得太乱了吧。。。。给你整理了一下并加了注释

程序代码:
#include <stdio.h>

void sort(int array[], int n);

int main(void)
{
    int a[10], i;
   
    printf("please enter the array\n");
    for(i=0; i<10; i++)  //输入10个数字并赋值给数组A
    {
        scanf("%d", &a[i]);
    }
   
    sort(a,10); //调用 sort 函数

    printf("the sorted array:\n");

    for(i=0; i<10; i++)  //输出结果
    {
        printf("%5d", a[i]);
    }
   
    printf("\n");
   
    return 0;
}


void sort(int array[],int n)
{
    int i, j, k, t;

    for(i=0; i<n-1; i++)
    {
        k = i;
        for(j=i+1; j<n; j++)
        {
            if(array[j] < array[k]) //比较两个数,并把小下标的赋值给K
            {
                k = j;
            }
        }

        //交换两个数字,实现数组从小到大排序
        t = array[k];
        array[k] = array[i];
        array[i] = t ;
    }
}




[ 本帖最后由 lixnkei 于 2010-4-8 10:28 编辑 ]


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-04-08 10:27
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
收藏
得分:0 
{k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
  k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
谁能给我详细解释一下这段,为什么刚开始将k=i,然后又k=j.然后又t=array[k];array[k]=array[i];array[i]=t;现在的array[k]代表的是什么了呢?是array[i],还是array[k]呢,还是?还有它是怎样循环的?

付出终将有回报!Ibelieve!
2010-04-08 18:06
itma
Rank: 4
等 级:业余侠客
帖 子:105
专家分:266
注 册:2010-2-8
收藏
得分:4 
回复 4楼 whbc
这个就是说:相邻的两项如果后项比前项小,那么就交换,为的就是让小的在前面,大的在后面。
        t = array[k];
        array[k] = array[i];
        array[i] = t ;
前面已经说了把j赋值给k,j是什么?是后一项,是i+1,而i就是前面那一个
我这样写:
        t = array[后一项];
        array[后一项] = array[前一项];
        array[前一项] = t;
结果是什么?
是后一项和前一项的值交换了。就是这样。
2010-04-08 18:26
hu1918
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-4-8
收藏
得分:0 
刚读大一C语言还没达标。。。
2010-04-08 18:31
一口三个汉堡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:155
专家分:525
注 册:2010-3-21
收藏
得分:10 
我给你解释下第一次循环好了
void sort(int array[],int n)
{
    int i,j,k,t;
  for(i=0;i<n-1;i++)
{
    k=i;//k为第一个数的下标
    for(j=i+1;j<n;j++)//j为第二个数的下标
    {
     if(array[j]<array[k])
      k=j;//如果第一个数大于第二个数,就把第二个数的下标赋值给k,也就是说k是用来保存最小数的下标的
      t=array[k];当一次循环完后把第一个数与最小的数交换
      array[k]=array[i];array[i]=t;
    }
}

[ 本帖最后由 一口三个汉堡 于 2010-4-8 19:18 编辑 ]

坚持做对的事情,而不是容易的事情。
2010-04-08 18:35
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
回复 2楼 何少仪
哎,你的也不怎么样,很好的编程规范见你楼下的那位
2010-04-08 19:13
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:2 
强烈建议你多按照三楼的规范编写程序
2010-04-08 19:14
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
收藏
得分:0 
谢谢大家的指导!!

付出终将有回报!Ibelieve!
2010-04-08 23:46
快速回复:大家帮我解释一下这个程序!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047742 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved