回复:Smart 200 天花板级冒泡排序子程序封装

已锁定

不欲勿施

  • 帖子

    836
  • 精华

    16
  • 被关注

    391

论坛等级:奇侠

注册时间:2009-03-27

黄金 黄金 如何晋级?

发布于 2023-04-05 17:56:03

74楼

展开查看
以下是引用小白_在2023-04-05 16:36:06的发言 >73楼

请教几个问题:1.取指针地址为什么要放在第一层的for循环里面?放在for循环外面不是执行效率更高吗?2.为什么第一层和第二层的for循环的次数都是一样的?第二层的循环次数不是应该是 #iDataCount:LW2-#sIndx1:LW29的次数吗?3.可以设置1个标志位,如果第二层循环没进行数据交换,可以直接跳出循环。


问题1:取指针地址为什么要放在第一层的for循环里面?放在for循环外面不是执行效率更高吗?

答:可以看这个操作的结果放到了累加器里,这些累加器在内层FOR里经过运算,值已经出现了变化。所以再回到外层FOR时自然要再取一次地址。所以把这个取指针地址的这个过程放到FOR循环内的话,是无法正常工作的。你可以测试一下,之后把测试结果说一下。

问题2:为什么第一层和第二层的for循环的次数都是一样的?第二层的循环次数不是应该是 #iDataCount:LW2-#sIndx1:LW29的次数吗?

答:首先肯定一下你的问题,你说的对。我们先来看一下C语言的冒泡排序算法代码

//冒泡排序

void BubbleSort(int* a, int n)

{  

int end = 0;

  for (end = n - 1; end >= 0; end--)  

  {    

    int exchange = 0;//记录该趟冒泡排序是否进行过交换

    int i = 0;

    for (i = 0; i < end; i++)    

    {

      if (a[i]>a[i + 1])

      {

        Swap(&a[i], &a[i + 1]);

        exchange = 1;

      }

    }

    if (exchange == 0)//该趟冒泡排序没有进行过交换,已有序     

 break;

  }

}

看完C代码,再来回答你的问题。为什么第一层和第二层的for循环的次数都是一样的?因为200smart的数据不支持数组下标,虽然用200smart勉强能实现了此功能,但是划不来,不如简单多循环几次。同时这个问题的第2个问号也是这个原因。

第二个问题回答完,第三个问题也就没必要回答了。


13478405725
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9142条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。