| 
 
| 本帖最后由 游呤人 于 2015-7-17 01:49 编辑 
 复制代码public class ArreyDome {
        /*
         * 首先我们来看看,常规的方式实现冒泡排序,
         * 冒泡排序的思想主要是两两比较,直到数组的结束,而每次比较出来的结果,
         * 后面的值一定是最大(升序)或最小(降序)的那么,我们开始遍历数组,  
         * 每次遍历后,后面的值一定是最大或最小的那么我们每次遍历完后,后面的值就可以不要再考虑了 
         * 直到程序到数组不在可以比较的时候.
         * */
        public void bubblie(int[] arr) {
                for (int i = 0; i < arr.length-1; i++) {
                        for (int j = 0; j < arr.length-1-i; j++) {
                                if (arr[j] > arr[j + 1]) {
                                        int tmp = arr[j];
                                        arr[j] = arr[j + 1];
                                        arr[j + 1] = tmp;
                                }
                        }
                }
        }
        /*
         * 前面的方法是,从后面向前面递减,那么我们为什么不吧比较的次数从后往前递增呢?
         * 每次遍历都保证数组的前面的数据都是有序的呢?
         * 
         * */
        public void bubblie1(int[] arr) {
                for (int i = 0; i < arr.length - 1; i++) {
                        for (int j = 0; j < i; j++) {
                                if (arr[j] > arr[j + 1]) {
                                        int tmp = arr[j];
                                        arr[j] = arr[j + 1];
                                        arr[j + 1] = tmp;
                                }
                        }
                }
        }
        /*
         * 上面的程序都是两层循环嵌套,但每次无非比较的还是数组.
         * 那么将数组在传给自己就好了,何必这么麻烦,但是需要考虑的是程序
         * 在调用自己的话对无限制的运行下去,那么我需要考虑一个边界,
         * 来看看前两个程序,无论是第一种还是第二种他都是将程序外层循环的边界设定为arr.length()
         * 这样我们就定义一个标记,当这个标记等于arr.length()就返回即可
         * 
         * */
        public void bubblie2(int[] arr,int i) {
                if(arr.length==i){
                        return;
                }        
                for (int j = 0; j < arr.length - 1; j++) {
                                if (arr[j] > arr[j + 1]) {
                                        int tmp = arr[j];
                                        arr[j] = arr[j + 1];
                                        arr[j + 1] = tmp;
                        }
                }
                i++;
                bubblie2(arr, i);
        }
 
 //请经量避免使用递归,因它很耗内存的
 | 
 |