标题:求大神告知运行原理
只看楼主
牧城雪
Rank: 1
等 级:新手上路
帖 子:33
专家分:9
注 册:2017-11-6
结帖率:66.67%
已结贴  问题点数:20 回复次数:7 
求大神告知运行原理
求这个进行升序排列的原理
搜索更多相关主题的帖子: 运行 原理 升序 排列 
2017-11-16 16:11
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
看不到代码
2017-11-16 16:16
牧城雪
Rank: 1
等 级:新手上路
帖 子:33
专家分:9
注 册:2017-11-6
得分:0 
回复 2楼 吹水佬
#include<stdio.h>
main()
{
int a[10]={23,24,26,21,20,10,7,8,5,4},i,j,K,t;
for(i=0;i<9;i++)
{
    K=i;
    for(j=i+1;j<10;j++)
     if(a[j]<a[K])
     {
         K=j;
     }
     if(K!=i)
     {
         t=a[i];
         a[i]=a[K];
         a[K]=t;
     }
}
for(i=0;i<10;i++)
  printf("%d ",a[i]);
}
2017-11-16 16:25
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
这个也算是冒泡排序,只是比对时记录最小值元素的下标。
2017-11-16 16:32
牧城雪
Rank: 1
等 级:新手上路
帖 子:33
专家分:9
注 册:2017-11-6
得分:0 
回复 4楼 吹水佬
为什么是if(K!=i)
2017-11-16 16:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用牧城雪在2017-11-16 16:52:48的发言:

为什么是if(K!=i)

K!=i就是K有变动,即有更小的元素。
2017-11-16 17:38
如此美好
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-11-17
得分:0 
把第二个if里面的内容取代第一个if里面的就行啊,何必那么麻烦。
2018-01-12 18:52
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
这个其实是选择排序

if (K!=j)
这个有没有必要个人保留意见~
加了的话每次交换前都要多一次判断,只有当K==j的时候能省点时间~
但不加的话当K==j时就要多花点时间了~
通常来说数组规模越大K==j的可能性越小~
如果数组规模不大的话或者多少可以优化一点的~
不过如果数组规模不大那就意味着不缺执行时间啊,一般情况下谁会在乎0.0001s和0.0002s到底哪个快点呢,而且执行时间不够长的话相对于外部偶然因素影响就大了,所以斟酌这么一点点优化甚至得不偿失,这就见笑了~
当然,总体上来说感觉这个优化作用不是很大~不过看见教材上很多这样写,那就显得很有趣了~

[此贴子已经被作者于2018-1-12 23:27编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-01-12 23:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-482544-1-1.html




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

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