JAVA-初步认识-第五章-数组-常见操作-排序的性能问题
一.
这里对前面的选择排序操作进行了深化,之前讨论的选择排序是将0角标上的数据和后面角标的数据一个个进行对比,不断地调换数据的位置,直到0角标上的数据是整个数组中的最小值。由于调换的次数较多,现在引发一个疑问,能不能直接将0角标的数据和最小数据进行对换(前提是知道最小数据的角标是多少)。
之前的例子里,选择排序中,进行了三次比较调换数据,才使得角标0上的数据是最小的。现在要换个思路来解决相同的问题。
具体的操作是:先定义两个变量,为什么要定义两个变量?一个变量记录用于比较的元素num,一个变量记录角标值。
思考:通过视频讲解,这里是开辟了两个新的变量作为记录的地方,然后在这两个变量上进行操作,比较的过程中,不对数组进行任何操作。经过所有的比较后,两个变量记录的是最小值和最小值的角标。最后,直接将数组中的,0角标的数据和4角标的数据进行数据交换。这个思路相较于之前的解题来说,进行了一个前期的铺垫。其实,我觉着这个思路的过程中,操作也挺多的。增加了比较记录的次数,减少了交换的次数。那两个变量是存储在栈内存中的。
如果改变调换语句,结果如下
注解:多条语句写在一行的书写格式不清楚。同时定义多个变量时,变量之间可以采用逗号隔开,但是不同的表达式在一行连用时,就不能用逗号隔开。
视频的解题中,还比我们多了一步就是判断是否0角标的数据就是最小值,要进行检查。
注解:这种思路相比较之前的选择排序,调换位置上的数据次数是减少了。效率会比之前的选择排序效率高一些,为什么?下面将每一步的思路都改成了现在谈论的定义两个变量的思路。
这里选择排序中的两种思路,第一种思路是在一轮中,进行了多次调换位置;第二种思路是在一轮中,用了两个变量标记,进行了一次调换位置。在数据数目很多的情况下,第二种思路的效率要比第一种高的多。