| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1241 人关注过本帖
标题:选择排序法中的一个疑问
只看楼主 加入收藏
LinkedOut
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-7-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:13 
选择排序法中的一个疑问
  void SelectionSort(int arr[ ],int n)
{
      int  i,j,k,t ;
      
      for(i=0;i<n-1;i++) {
              k =i;
             for(j=i+1;j<n;j++)
                    if(arr[j]<arr[k])
                        k=j;
                        t=arr[k];
                        arr[k]=arr[i];
                       arr[i]=t;
         }
}
       我的疑问是:以第一次外循环为例,arr[k]中k的值始终都是0吗?

[此贴子已经被作者于2016-7-22 19:23编辑过]

2016-07-22 18:38
LinkedOut
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-7-22
收藏
得分:0 
顺便把源程序贴出来
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-07-22 18:50
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:10 
不一定
2016-07-22 18:59
LinkedOut
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-7-22
收藏
得分:0 
你来具体说说它的原理@linlulu001

[此贴子已经被作者于2016-7-22 19:04编辑过]

2016-07-22 19:01
LinkedOut
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-7-22
收藏
得分:0 
回复 2楼 LinkedOut
你能具体说说它的原理吗
2016-07-22 19:02
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
看样子你应该是初学C语言,我把大括号补全来。这样你应该就能看懂了。
 void SelectionSort(int arr[ ],int n)
{
      int  i,j,k,t ;
      
      for(i=0;i<n-1;i++)
    {
             k =i;
             for(j=i+1;j<n;j++)
               {
                    if(arr[j]<arr[k])   //晕死掉,你抄代码都抄错掉。光看你的贴图,都没发现。是“j”,不是i
                      {
                          k=j;
                      }
               }
              t=arr[k];
              arr[k]=arr[i];
              arr[i]=t;
         }
}


[此贴子已经被作者于2016-7-22 19:16编辑过]

2016-07-22 19:04
LinkedOut
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-7-22
收藏
得分:0 
我是指arr[0]的值应该分别与arr[1],arr[2]......arr[n-1]的值比较大小,在第一次外循环时,而k=j改变了k的值,如果输入一组没有大小顺序的数据。
  @linlulu001输入时犯了小糊涂,我现在不是代码抄错的问题

[此贴子已经被作者于2016-7-22 19:21编辑过]

2016-07-22 19:17
晓益
Rank: 4
来 自:江苏扬州
等 级:业余侠客
威 望:2
帖 子:85
专家分:220
注 册:2016-7-9
收藏
得分:10 
回复 楼主 LinkedOut
你这代码机制是:利用索引值k和j,进行数组间值的对比,这里的k=i,j是i之后的数组索引值
                 使用for循环进行数值对比,找到其中最小值,其中的索引值的就存储在k中
                 最后进行交换

千里之行,始于足下。
思考问题伤细胞,得分不容易。解决完问题请尽快结贴
2016-07-22 19:28
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
只要arr[0]不是最大值,k必然改变。
在我看来,只有代码抄错才会感觉k的值没有变,最后运行的时候发现数组压根就没有变化,怎么样输入的就怎么样输出。
2016-07-22 19:28
LinkedOut
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-7-22
收藏
得分:0 
你一直强调我抄错代码并没有什么意思,反而是关于这段程序你还没说到运作原理
2016-07-22 19:35
快速回复:选择排序法中的一个疑问
数据加载中...
 
   



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

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