马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
<p><span style="color: rgb(51, 51, 51); font-family: "Microsoft Yahei", Tahoma, Helvetica, SimSun, sans-serif; font-size: 14px; text-wrap: wrap; background-color: rgb(255, 255, 255);">在面对一些大小顺序比较混乱的一些数据时,会有将其进行从小到大的顺序排列的需求,工程中最常用的排序方法要属冒泡法排序了。</span><br/><span style="color: rgb(51, 51, 51); font-family: "Microsoft Yahei", Tahoma, Helvetica, SimSun, sans-serif; font-size: 14px; text-wrap: wrap; background-color: rgb(255, 255, 255);">冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟,仍然重复第一趟的过程直到结束,可以把第二大的数放到了倒数第二个位置,一共运行n趟,n是这些数组的个数,就会把最小的数放到数组第一个位置。这样在进行n-1趟的运行排序后,这组数组就会按照从小到大的顺序进行排列。</span><br/></p><p><img id="aimg_143196" src="/upload/image/20231113/1699868193795337.png" class="zoom" width="199" alt="冒泡法排序算法" title="" style="overflow-wrap: break-word; cursor: pointer;"/></p><p><span style="color: rgb(51, 51, 51); font-family: "Microsoft Yahei", Tahoma, Helvetica, SimSun, sans-serif; font-size: 14px; text-wrap: wrap; background-color: rgb(255, 255, 255);">从冒泡法的上述过程可以看出,由于在排序的过程中总是小数往前面放,大数往后面放,相当于气泡在往上升,所以也叫做冒泡排序。</span><br/></p><p><img id="aimg_143190" src="/upload/image/20231113/1699868193547311.png" class="zoom" width="263" alt="冒泡法排序算法" title="" style="overflow-wrap: break-word; cursor: pointer;"/></p><p><span style="color: rgb(51, 51, 51); font-family: "Microsoft Yahei", Tahoma, Helvetica, SimSun, sans-serif; font-size: 14px; text-wrap: wrap; background-color: rgb(255, 255, 255);">在中型PLC中,运用ST语言我们想要实现这个算法,可以利用两次FOR循环的嵌套(双重循环)来实现这个功能,外层的FOR循环主要体现在运行的趟数,从1到数组个数n-1趟,内层的FOR循环主要比较第一个点和其后面点到第n-1点和其后面点的比较。</span><br/><span style="color: rgb(51, 51, 51); font-family: "Microsoft Yahei", Tahoma, Helvetica, SimSun, sans-serif; font-size: 14px; text-wrap: wrap; background-color: rgb(255, 255, 255);">举个例子,比如以下数组(包括6个元素):</span><br/></p><p><img id="aimg_143191" src="/upload/image/20231113/1699868194170191.png" class="zoom" width="543" alt="冒泡法排序算法" title="" style="overflow-wrap: break-word; cursor: pointer;"/></p><p><span style="color: rgb(51, 51, 51); font-family: "Microsoft Yahei", Tahoma, Helvetica, SimSun, sans-serif; font-size: 14px; text-wrap: wrap; background-color: rgb(255, 255, 255);">通过以下程序,采用双重循环进行实现:</span><br/></p><p><img id="aimg_143192" src="/upload/image/20231113/1699868194354655.png" class="zoom" width="521" alt="冒泡法排序算法" title="" style="overflow-wrap: break-word; cursor: pointer;"/></p><p><span style="color: rgb(51, 51, 51); font-family: "Microsoft Yahei", Tahoma, Helvetica, SimSun, sans-serif; font-size: 14px; text-wrap: wrap; background-color: rgb(255, 255, 255);">进行冒泡法排序后,数组的值为:</span><br/></p><p><img id="aimg_143193" src="/upload/image/20231113/1699868194111810.png" class="zoom" width="524" alt="冒泡法排序算法" title="" style="overflow-wrap: break-word; cursor: pointer;"/></p><p><span style="color: rgb(51, 51, 51); font-family: "Microsoft Yahei", Tahoma, Helvetica, SimSun, sans-serif; font-size: 14px; text-wrap: wrap; background-color: rgb(255, 255, 255);">上述程序通过采用冒泡法,实现了对一个排序混乱的数组进行重新排序,实现了数组的重新排序。</span><br/><span style="color: rgb(51, 51, 51); font-family: "Microsoft Yahei", Tahoma, Helvetica, SimSun, sans-serif; font-size: 14px; text-wrap: wrap; background-color: rgb(255, 255, 255);">针对评论区的建议,对冒泡法排序进行了改进,为了减少for循环运算的步骤,节省计算机运算的ram,内层的j循环其实不用从第1到第(数组个数-1)的循环,可以针对外层的i,从第(数组个数-i)到1的循环,每次运行-1的个数即可,这么做相对于之前的算法省去了很多for循环的步骤,之前的步骤是5×5=25步,现在是5+4+3+2+1=15步,在应对较多的数组个数排序时存在着很大的优势。</span><br/></p><p><img id="aimg_143519" src="/upload/image/20231113/1699868194523864.png" class="zoom" width="600" alt="冒泡法排序算法" title="" style="overflow-wrap: break-word; cursor: pointer;"/></p><p><br/></p> |