| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1239 人关注过本帖
标题:选择排序法中的一个疑问
只看楼主 加入收藏
LinkedOut
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-7-22
收藏
得分:0 
回复 8楼 晓益
每个回合比较完后,arr[i]是最小值,例如输入10   14  6   18  20,那么第一个回合就是arr[0]的值和后面四个数组元素的值依次比较大小,每比一次如果满足if语句就把值交换到arr[0],再看看我的问题吧

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

2016-07-22 20:15
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 

void SelectionSort(int arr[ ],int n)
{
      int  i,j,k,t ;
      
      for(i=0;i<n-1;i++)
    {
             k =i;                            //每次循环开始记录i的位置,这样就能遍历数组arr[i]之后的数
             for(j=i+1;j<n;j++)               //让数组从第i+1个数开始,
               {
                    if(arr[j]<arr[k])        //如果arr[k]>arr[j],就将下标j的值赋值给k
                      {
                          k=j;
                      }
               }
              t=arr[k];    arr[k]=arr[i];  arr[i]=t; //这三句表达的是让k位置上的数和i位置上的数进行交换
         }
}
再看不懂,我就没办法了。
初学者就把大括号标全来。而且前面也提醒过你,也标好了给你看,如果你真的有认真看就不会问每比一次如果满足if语句就把值交换到arr[0]这个傻的不能再傻的问题。
2016-07-22 20:32
LinkedOut
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-7-22
收藏
得分:0 
这些注释全都废话,原因还是在于if只执行分号结束前的一条语句,后三句if无法起作用。for也一样,打上{}就能作用到多条语句。要是这么说就不必浪费这么多口水。而,我说的「比完一次大小交换一次值」由此看来是选择排序法的另一种方法,原先我以为这段代码用的就是这种方法,这也就是我为什么会提出这个问题,
程序代码:
 void SelectionSort(int arr[ ],int n)
{ 
      int  i,j,temp;
      
      for(i=0;i<n-1;i++) {
             for(j=i+1;j<n;j++)
                    if(arr[j]<arr[i]) {
                        temp=arr[i];
                        arr[i]=arr[j];
                        arr[j]=temp;
                     }
         }
}
       


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

2016-07-23 07:24
LinkedOut
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-7-22
收藏
得分:0 
至此感谢大家的关注,至此疑问已经烟消云散
2016-07-23 07:27
快速回复:选择排序法中的一个疑问
数据加载中...
 
   



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

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