| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 414 人关注过本帖
标题:【请教】帮忙解释下程序执行过程!20分悬赏!。。。。。。。。。。。。
只看楼主 加入收藏
ab6326795
Rank: 2
等 级:论坛游民
帖 子:91
专家分:56
注 册:2010-11-8
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:5 
【请教】帮忙解释下程序执行过程!20分悬赏!。。。。。。。。。。。。
书上的,相信你也看过

程序代码:
#include<stdio.h>
void sort(int k[],int n);  //声明
void main()
{

    int p[5],i;
    printf("请输入5个数字:\n");

    for(i=0;i<5;i++)
    {
    scanf("%d",&p[i]);  //用户输入5个数字
   
    }

    sort(p,5);  //调用函数排序

    for(i=0;i<5;i++)
    {
    printf("您输入的数字有小到大排序为:%d\t",p[i]);

    }
    getch();


}

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;    // 到这里为止:。。。。。。。。。


}


}

谁先解释,让我理解了就送20分,谢谢了!!!!!!


2011-06-10 20:29
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:10 
楼主还是先说一下自己的理解比较好
2011-06-10 20:30
ab6326795
Rank: 2
等 级:论坛游民
帖 子:91
专家分:56
注 册:2010-11-8
收藏
得分:0 
回复 2楼 voidx
那我先说
程序代码:
void sort(int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)   // 本例为5个数,此行目的是用前4个数字在其后于第5个数字比较,然后循环,4:1,3:1,2:1,得出最大值排序?
{
k=i;                 //赋值?为什么不不直接用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;    //交换值


}


}



2011-06-10 20:37
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:10 
程序代码:
void sort(int array[],int n) {
    int i,j,k,t;
    for(i=0;i<n-1;i++) {                // 令 i = 0,当 i < n - 1 时,重复执行下列操作,每次执行结束后令 i 自增 1
        k=i;                            // 令 k = i。即假设 array[i] 为 array[i] ~ arrar[n-1] 中最小的一个
        for(j=i+1;j<n;j++) {            // 令 j = i + 1,当 j < n 时,重复执行下列操作,每次执行结束后令 j 自增 1
            if(array[j]<array[k]) {     // 若 arrary[j] < array[k]
                 k=j;                   // 令 k = j,即假设 array[j] 为  array[i] ~ arrar[n-1] 中最小的一个
            }                           // 当循环 j 结束后,array[k] 即为 array[i] ~ arrar[n-1] 中最小的一个
        }
        t=array[k];                     //
        array[k]=array[i];              // 这三行交换 array[i] 与 array[k]。即将array[i] ~ arrar[n-1] 中最小的一个交换到 array[i] 中
        array[i]=t;                     //
    }                                   // 循环 i 的作用就是逐个将 array 中最小的、第二小的。。。元素放到 array[0]、array[1]。。。中
}                                       // 即将 array 按照升序排序


以上代码如果在循环中不使用 k 而直接使用变量 i,将会直接改变外层循环的循环变量的值,进而使代码的执行流程被破坏,变得无法预测

[ 本帖最后由 voidx 于 2011-6-10 20:56 编辑 ]
2011-06-10 20:50
黄昏乐章
Rank: 2
来 自:青岛
等 级:论坛游民
帖 子:73
专家分:25
注 册:2011-6-6
收藏
得分:0 
我觉得就是从数组第一个数开始与之后数比较凡是之后数比第一个数大就和第一个数交换。这样就第一个数在第一个循环结构第一次循环后一定是最大的数。第二次循环之后的第二个肯定是次大的。循环结束后就按从大到小排列了
2011-06-10 21:10
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 5楼 黄昏乐章
不是大,是小。
这个就是最基础的排序算法----选择排序法

[ 本帖最后由 voidx 于 2011-6-10 21:45 编辑 ]
2011-06-10 21:35
快速回复:【请教】帮忙解释下程序执行过程!20分悬赏!。。。。。。。。。。。。 ...
数据加载中...
 
   



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

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