本帖最后由 MK_Chan 于 2014-4-1 11:42 编辑
为了让楼主更容易理解,我结合一下算法的步骤来解析一下吧。
冒泡排序的原理我就不用多讲了吧,楼主给出的“//排序函数”就是属于冒泡排序算法了。
第一个问题:x<arr.length-1 为嘛要减 1 ?
我们假设两种情况:
一、x<arr.length;
以开始的数组 int[] arr = {1,3,5,7,9,2,4,6,8};为例。
数组有9个元素,所以arr.length=9,所以x能达到的最多值为8。
当算法进行最后一次比较的时候:
我们看代码int y=0; y<arr.length-x-1;x取到最大值为8。
所以这个代码为y=0;y<0。显然这个循环条件是不成了的,所以不会进入循环里面的判断。
所以当y=0的时候:if(arr[y]>arr[y+1])也就是if(arr[0]>arr[1])是没有被执行的,也就是说这个冒泡排序是不完整的。
二、x<arr.length-1;
以开始的数组 int[] arr = {1,3,5,7,9,2,4,6,8};为例。
数组有9个元素,所以arr.length=9,所以x能达到的最多值为7。
当算法进行最后一次比较的时候:
我们看代码int y=0; y<arr.length-x-1;x取到最大值为7。
所以这个代码为y=0;y<1。显然这个循环条件成立,所以会进入循环里面的判断。
所以当y=0的时候:if(arr[y]>arr[y+1])也就是if(arr[0]>arr[1])被执行,算法完整,冒泡排序完成。
第二个问题:不减 1 也能运行啊?
程序是可以运行的,只是冒泡排序不完整,看第一种情况最后那里的解析。
【求加技术分 T 。T】 |