快捷搜索:  汽车  科技

计算机二级选择题题库及答案(计算机等级二级考试辅导)

计算机二级选择题题库及答案(计算机等级二级考试辅导)(3)在MyEclipse开发工具中创建出一个类名称为ElementBubbleSort,程序包名称为com.bluedream.javaoop,并且包含有main()方法的Java程序类,ElementBubbleSort程序类的创建过程参看如下示例图所示。在本示例的Java程序中,首先定义待排序的数组(目前数组中的各个元素是预先定义的,后续可以由用户输入),然后再对该数组中的各个元素值应用冒泡排序算法实现排序,并打印出排序前和排序后的数组中的各个元素值,以方便进行对比。根据前面所给出的冒泡排序算法的定义,可以清晰地了解到冒泡排序算法的实现原理如下:比较两个相邻的元素,将值大的元素交换至右端。对每一对相邻的元素都完成同样的比较工作直到最后一对,针对所有的元素都重复以上的步骤,除了最后一个元素,直到没有任何一对数字需要进行比较为止。因此,冒泡排序算法如果希望通过程序设计加以实现,则要在程序

计算机二级选择题题库及答案(计算机等级二级考试辅导)(1)

1、应用冒泡排序算法编程实现对某个数组元素进行排序

(1)什么是冒泡排序算法(Bubble Sort)

对于什么是冒泡排序算法,读者可以查询百科。在百科中的定义如下:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

经过这样的排序后,最后的元素应该会是最大的数(当然,也可能是最小的数,取决于对数据的排序规则和要求)。因此,一批数据中的较小元素会经由这样的“排序交换”慢慢“浮(冒泡)”到这批数据的顶端(升序或降序排列),此排序算法由此得名冒泡排序算法。

(2)问题分析和解题思路

根据前面所给出的冒泡排序算法的定义,可以清晰地了解到冒泡排序算法的实现原理如下:比较两个相邻的元素,将值大的元素交换至右端。对每一对相邻的元素都完成同样的比较工作直到最后一对,针对所有的元素都重复以上的步骤,除了最后一个元素,直到没有任何一对数字需要进行比较为止。

因此,冒泡排序算法如果希望通过程序设计加以实现,则要在程序中运用双层嵌套循环进行冒泡排序算法的编程实现。因为冒泡排序算法其实就是把一批数据中比较小的元素往前调或者把大的元素往后调,而比较是相邻的两个元素进行比较,数据交换也只发生在这两个元素之间——两两比较、两两交换。

但如果相邻的两个元素值相等,则不会再进行交换的(这样也就减少了交换的次数)。而如果两个元素的值相等、但元素在位置上并没有相邻,那么即使通过前面的两两交换把两个元素相邻起来,这时候也不会对它们进行交换。所以相同元素值的两个元素的前后顺序在此算法中并没有被改变,故冒泡排序是一种稳定排序算法。

在本示例的Java程序中,首先定义待排序的数组(目前数组中的各个元素是预先定义的,后续可以由用户输入),然后再对该数组中的各个元素值应用冒泡排序算法实现排序,并打印出排序前和排序后的数组中的各个元素值,以方便进行对比。

(3)在MyEclipse开发工具中创建出一个类名称为ElementBubbleSort,程序包名称为com.bluedream.javaoop,并且包含有main()方法的Java程序类,ElementBubbleSort程序类的创建过程参看如下示例图所示。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(2)

(4)点击对话框中的“Finish”按钮,MyEclipse开发工具将帮助开发人员创建出ElementBubbleSort类的初始程序,在ElementBubbleSort类的初始程序中只包含有默认构造方法和main()方法。最终的程序结果示例参看如下示图所示。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(3)

(5)编程ElementBubbleSort类中的功能实现的程序代码

在程序设计实现方面主要是应用双层嵌套for循环进行冒泡排序编程实现,参考如下示例图中的示例代码中的嵌套for循环的实现代码。在目前阶段的程序代码实现中,主要是编程ElementBubbleSort类中的main()方法,参看如下示例图所示的main()方法代码。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(4)

正是由于冒泡排序算法是应用双层嵌套for循环加以实现,因此冒泡排序算法其实是比较慢和效率较低的排序算法。因为它需要一谝又一谝地比较一批数中的每一个数据元素,以调整这些数据之间的顺序(大数下沉,小数上升)。因此,冒泡排序算法适用于数据量比较少的排序应用场景中。

(6)执行ElementBubbleSort程序类示例代码

在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目以在Java虚拟机环境中执行示例,将执行本示例ElementBubbleSort类程序,参看如下示例图所示的操作过程。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(5)

(7)ElementBubbleSort类的程序代码执行完毕后,在显示的控制台中将显示出排序前和排序后的两种不同的结果,参看如下示例图所示的程序代码。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(6)

原本杂乱无序的一批数据(10 -30 -20 100 50 30 40 20 -10 60 10)经过冒泡排序后改变为从小到大的顺序(升序)排列(-30 -20 -10 10 10 20 30 40 50 60 100)。因此,应用冒泡排序算法可以实现对一批数据进行整理(从小到大或者从大到小等顺序)。作者突然想到生活中的集体活动的排队其实就是冒泡排序算法的一个实际应用——列队人员初始站队时由于没有固定的位置和人员身高的高矮也不明确,往往是全部人员先随便站成一排,然后再通过逐个换位的方式逐步形成高矮顺序的队列,从高到低列队或者从低到高列队。

在该数组中有两个元素的数据值是相等的,排序后两个相等的数据元素也就排序在一起了。但由于冒泡排序算法属于稳定性的算法,这两个相等的数(数据值为10)其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。

2、优化本示例程序以提高程序的执行效率

(1)示例程序目前所存在的不足——双层嵌套循环所带来的程序实现在执行效率方面是低下的

如果一批数据在经过顺序排序后已经排序完毕了,但冒泡排序算法的循环过程仍然会继续进行下一轮的数据元素的比较,直到总元素个数-1次的循环执行完毕为止。因此,在这种状况下,后面的循环比较过程其实是没有意义的,也没有必要再继续执行余下的循环了。否则将降低程序执行的总体效率。

(2)问题分析和解决此问题的实现思路

可以在实现冒泡排序算法的程序中,设置一个布尔类型的标志位(本程序示例是定义isExchange变量),如果发生了数据元素的交换,isExchange变量将设置为true,而如果没有进行数据元素的交换就设置为false。

因此,当一轮循环比较结束后,程序则判断isExchange变量的状态。如果isExchange变量仍为false,也就是在这一次循环中根本就没有发生数据元素的交换,说明这批数据的顺序已经排序完毕,也就没有必要再继续进行循环比较以减少无意义的循环。

(3)修改示例程序中的main()方法以完成对示例程序的优化

在程序代码中定义了一个识别相邻的两个元素是否进行了交换的标志变量,该变量为布尔类型,变量名称为isExchange(参考下面示例程序中的变量定义语句)。

每次遍历时标志位变量isExchange都要设置为false(初始化),而只当发生了数据交换后才设置为true。在每一轮循环结束之前,则判断标志位isExchange变量是否仍然为false,如果为false,则说明后面的元素已经有序排列了,不再需要进行比较和交换,因此就直接退出当前的循环过程以提前结束循环过程。从而减少了无意义的循环,从而提高了程序执行的效率。

main()方法最终的程序代码示例,请参看如下示例图所示的程序代码。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(7)

计算机二级选择题题库及答案(计算机等级二级考试辅导)(8)

(4)执行优化后的ElementBubbleSort程序示例

在显示的控制台中将显示出排序前后的结果,与前面未优化的程序执行的结果相同。表明程序在功能实现方面没有问题,请参看如下示例图所示的执行结果。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(9)

3、优化代码示例以符合面向对象编程封装和代码重用的设计原则

(1)目前示例程序在代码实现方面所存在的不足—— 所有的功能实现程序代码都放在main()方法中,不符合面向对象编程的封装和代码重用的设计原则

因此,需要优化代码示例以符合面向对象编程封装和代码重用的设计原则。

(2)问题分析和解题思路

将实现对数据冒泡排序的功能程序代码设计为一个方法(函数)doElementBubbleSort,并将该方法封装在示例程序类中。在使用处对该方法进行调用,并输入待排序的数据,同时返回输出排序后的结果。doElementBubbleSort方法的最终代码示例参看如下示例图所示的程序代码。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(10)

(3)修改ElementBubbleSort 程序类中的main()方法

由于将实现冒泡排序算法的核心功能程序重构到了doElementBubbleSort方法体内,因此ElementBubbleSort 程序类中的main()方法也就相应地发生了变化。需要进行相应的完善和修改,在main()方法体内主要是创建ElementBubbleSort类的对象实例;然后再通过该对象实例调用doElementBubbleSort方法,并传入待排序的数组;最后获得doElementBubbleSort方法返回的排序后的结果数组,在控制台打印输出。main()方法的最终的程序代码请参看如下示例图所示的程序代码。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(11)

(4)再次执行优化后的ElementBubbleSort程序示例

在显示的控制台中将显示出排序前后的结果,与前面的程序执行的结果相同。表明程序在功能实现方面没有问题,请参看如下示例图所示的执行结果。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(12)

4、再次优化程序代码示例以提高程序的灵活性和通用性

(1)目前的程序示例所存在的主要问题

前面的程序示例尽管从冒泡排序的功能实现方面并没有什么问题或者不足,但由于示例程序中待排序的数据是在程序中预先定义,这导致程序不灵活和缺少通用性。

作者本着精益求精的程序设计理念,将进一步优化程序示例,允许待排序的数据是由用户提供。比如用户从键盘输入或者程序自动地读取存储在数据文件中的一批数据等方式。当然,在下面的示例中数据来自于用户的键盘输入。从程序设计的角度,其实就是修改示例程序中的如下数据初始化的语句:

someOneBubbleSortArray = new int[]{10 -30 -20 100 50 30 40 20 -10 60 10};

改变为从getUserSortedDataArray()方法的返回结果中获得,参看如下的代码语句:

someOneBubbleSortArray = oneElementBubbleSort.getUserSortedDataArray();

(2)在示例程序ElementBubbleSort类中新增加一个名称为getUserSortedDataArray方法,该方法的程序代码示例请参看如下示例图所示的程序代码。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(13)

(3)修改main()方法以实现对getUserSortedDataArray方法的调用

在main()方法体内,首先构建出ElementBubbleSort类的对象实例;然后通过该对象实例调用getUserSortedDataArray方法以获得用户从键盘中输入的数据集;再然后再调用doElementBubbleSort方法,并传入用户从键盘中所输入的数据构建的数组;最后获得经过冒泡排序算法处理后的返回结果数组,在控制台中显示该数组的各个元素值。请参看如下示例图所示的程序代码。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(14)

(4)再次执行优化后的ElementBubbleSort程序示例

为了与前文中的程序执行结果进行对比,在数据输入方面仍然输入与在程序中定义的数据保持一致性,也就是仍然输入如下的数据:10 -30 -20 100 50 30 40 20 -10 60 10。

优化后的程序执行的结果与前文中的执行结果相同,表明示例程序中正确地获得了用户输入的各个数据。据此将大大地提高了程序的灵活性和通用性。请参看如下示例图所示。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(15)

(5)输入其它系列数据再进行测试程序的功能

比如输入如下的数据:100 -50 30 0 -10 20 -5 20 30 40 -60 70,示例程序执行后数据排序的结果完全正确。请参看如下示例图所示。

计算机二级选择题题库及答案(计算机等级二级考试辅导)(16)

计算机等级二级考试辅导:综合应用上机模拟题及解答(第6部分)

计算机等级二级考试辅导:综合应用上机模拟题及解答(第5部分)

计算机等级二级考试辅导:综合应用上机模拟题及解答(第4部分)

计算机等级二级考试辅导:综合应用上机模拟题及解答(第3部分)

计算机等级二级考试辅导:综合应用上机模拟题及解答(第1部分)

猜您喜欢: