冒泡排序

来源:互联网 发布:linux系统usb无线网卡 编辑:程序博客网 时间:2024/06/05 09:24

全代码

 /**     *     * @param array     * @param desc=true,为升序,false为降序     * @return     */    public static int[] order(int[] array,boolean desc){        boolean isChange;        for(int j =0;j<array.length-1;j++){            isChange = false;            int  a = array[0];            for(int i=1;i<array.length -j;i++){                if(desc){                    if(a>array[i]){                        array[i-1] = array[i];                        array[i] = a;                        isChange = true;                    }else {                        a = array[i];                    }                }else {                    if(a<array[i]){                        array[i-1] = array[i];                        array[i] = a;                        isChange = true;                    }else {                        a = array[i];                    }                }            }//            for(int i=0;i<array.length;i++){//                System.out.print(array[i]+", ");//                if(i == array.length-1){//                    System.out.println();//                }//            }            if(!isChange){                break;            }        }        return array;    }

解析:(以升序为例)代码由里层循环向外层循环看。

//第一循环,将最大的数排在末尾。int  a = array[0];        for(int i=1;i<array.length;i++){            if(a<array[i]){                array[i-1] = array[i];                array[i] = a;            }else {                a = array[i];            }        }

当进行第二次循环时,就不用再去管排在末尾的数了,因为末尾已经是最大的。

同理,进行第三次循环时,就不用再去管后两位的数了,因为已经末尾后两位已经拍好序。
依次下去,可以得到下面代码

   for(int j=0;j<array.length-1;j++){            int  a = array[0];            for(int i=1;i<array.length-j;i++){//将判断条件改为i<array.length-j                if(a<array[i]){                    array[i-1] = array[i];                    array[i] = a;                }else {                    a = array[i];                }            }        }

在某次循环时,没有相邻的数据进行交换,即排序已经完成;不需要在进行比对,就可跳出循环,完成排序;所以设置标志为 isChange

请用数组 int[] array = {6,8,2,6,45,21,75,89,32,12,21,54};
和 int[] array = {6,8,2,6,45,21,75,89,32,12,21,54,1};
测试,以便更好理解。

0 0