1.问题描述
对20个20到100范围的随机整数进行从小到大排序操作(使用冒泡排序法)
2.问题思路
- 首先,20个数据我们需要用一维数组来进行数据存储
- 其次,我们要让每个数据在20到100之间,并且是整数,这就涉及到了任意范围随机数的生成问题,具体可以看我之前博客里面Raptor中生成任意范围随机数那一部分
- 然后,我们需要用冒泡排序法进行排序操作(关键步骤,本篇教学内容)
- 最后,我们需要注意一下数据的展示问题,这不是关键步骤,只是为了让结果更好看一些
3.实现过程
为了让主程序更简洁以及模块化设计,我们多用子图和子程序,这个问题里面我们用到初始化数据子图,展示数据子图和冒泡排序法排序的子程序。关于子图和子程序的用法请见 Raptor-子图与子程序
-
初始化数据
这个子图实现了得到长度为20的一维数组,并且数组中的元素是20100之间的整数,这个表示的是左闭右开区间[20,100)。
-
冒泡排序
冒泡排序法是基于交换来进行排序的方法,本题是从小到大排序,所以是两两比较,如果前面的是较大的数据,把前面的数据交换到后面去,假如数组的长度是n,那么我们从1遍历到n-1,那么第一趟比较完毕后,第n个数一定是最大的;第二趟我们只需要从1遍历到n-2,那么第二趟比较完毕后,第n-1个数一定是倒数第二大的,依次这样操作就可以完成排序。
冒泡排序法中,关键字较小的,就想气泡一样,每次向上漂,也就是排在前面,而关键字较大的,就是石块一样,每次向下沉,也就是排在后面,并且能保证,每一躺排序都有石块沉底,这就是为什么叫冒泡排序法
举例说明:
假如n=7,有七个数,数组名为a,每次我们比较a[j]和a[j+1],a[j]>a[j+1],我们交换a[j]和a[j+1]的数据
原数据:
49 38 65 97 76 13 27
第一趟:
循环变量j从1到6,第7个数是前7个数里面最大的
38 49 65 76 13 27 97
第二趟:
循环变量j从1到5,第6个数是前6个数里面最大的
38 49 65 13 27 76 97
第三趟:
循环变量j从1到4,第5个数是前5个数里面最大的
38 49 13 27 65 76 97
第四趟:
循环变量j从1到3,第4个数是前4个数里面最大的
38 13 27 49 65 76 97
第五趟:
循环变量j从1到2,第3个数是前3个数里面最大的
13 27 38 49 65 76 97
第六趟:
循环变量j从1到1,第2个数是前2个数里面最大的
13 27 38 49 65 76 97
总结规律,可以得到,n个数排序我们需要遍历n-1躺,如果我们记循环变量为i,则外层循环i从1到n-1,对于每一趟来说,我们需要进行n-i次比较,并且我们保证n-i+1是前n-i+1个数里面最大的
实现流程:
第一部分:
第二部分:
- 展示数据
我们需要展示排序前的数据和排序后的数据,因此主程序的逻辑如下图:
主程序:
展示数据子图:
结果:
4.说明
以上是关于冒泡排序法从小到大排序的,从大到小排序的很简单,就是把比较这一步a[j] > a[j+1],改成a[j] < a[j+1]就好了。
以上就是关于Raptor中冒泡排序法的内容,需要程序、代做程序或者有什么问题请联系QQ545030769