本帖最后由 qwert 于 2012-3-2 11:27 编辑
首先,你要了解什么是冒泡排序,也就是说,如果是从小到大排序的话,临近的两个数进行比较,大数不断右移,那么,一轮下来,最右边的那个数,肯定是这个数组中最大的值。
例:有数组int[] arr ={7,12,8,9,20,6,5,3} ,这个数组中7先和12比较,没12大,然后12再和8比较,12比8大,所以12要右移,以此类推……这样,一轮下来,最右边的数字肯定是20,那么下一局,这个最右边的20就不用参与比较了,因为肯定它最大。所以x的意义就是为了控制循环次数,当x=0的时候,也就是还没有比较,所以,用通过循环遍历数组中的所有元素,把最值存放在最后一个地址上。当x=1的时候,说明已经循环过一次,数组中最后一个元素已经是最大值,不需要参与运算了,也就没必要再让它比较。x=2的时候,则是有两个元素不必要参与运算……以此类推……所以要-x
这个数组arr.length的结果为8,下脚标也就是到7.当y=7的时候,arr[y+1]=8,这就造成了数组越界,为了防止越界,故需要在这个基础上减去1,让y的值最大取到6,那么arr[y+1]最大也就能到7。
希望这样说能解开些您的疑惑~
其实,您仔细多看下毕老师的视频多品味下,就能理解了。我也是没事儿就研究老视频,很多时候都能发现新问题和新体会。 |