<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-126  評(píng)論-247  文章-5  trackbacks-0

    N 個(gè)元素?cái)?shù)據(jù)需要進(jìn)行 N - 1 趟排序,第 i 趟排序,需要對(duì)元素?cái)?shù)據(jù)做兩兩比較 N - i 次,每趟排序完成之后,剩余較大的元素(升序)或較小的元素(降序)將冒到
    數(shù)組最末端,此后,該項(xiàng)元素就此排定,不需要再移動(dòng)。

    基類:BaseSort.java

    package sort;
    /**
     * -----------------------------------------
     * @文件: BaseSort.java
     * @作者: fancy
     * @郵箱: fancydeepin@yeah.net
     * @時(shí)間: 2012-7-18
     * @描述: 基類
     * -----------------------------------------
     
    */

    public class BaseSort {

        
    protected final static int ASC  = 1;    // 升序
        protected final static int DESC = 0;    // 降序
        
        
    //交換i1、i2下標(biāo)指向的值
        public void swap(Object[] array, int i1, int i2){
            Object tempObj;
            tempObj  
    = array[i1];
            array[i1] 
    = array[i2];
            array[i2] 
    = tempObj;
            tempObj 
    = null;
        }

        
        
    //打印輸出數(shù)組元素
        public void print(Object[] array){
            
    for(Object obj : array){
                System.out.print(obj 
    + "    ");
            }

            System.out.println();
        }

    }



    冒泡排序:BubbleSort.java

    package sort;
    /**
     * -----------------------------------------
     * @文件: BubbleSort.java
     * @作者: fancy
     * @郵箱: fancydeepin@yeah.net
     * @時(shí)間: 2012-7-18
     * @描述: 冒泡排序
     * -----------------------------------------
     
    */

    public class BubbleSort extends BaseSort{

        
    /**
         * @方法名:    bubbleSort 
         * @參數(shù)名: array 排序?qū)ο?br />     * @參數(shù)名: order 排序順序
         * @描述語(yǔ):    單向冒泡排序,復(fù)雜度:O(n^2)
         
    */

        
    public void bubbleSort(Object[] array, int order){
            
    int length = array.length;
            
    if(order == ASC){  //升序排序
                for(int i = 0, j; i < length - 1; i++){  //N個(gè)數(shù)需N-1趟,每趟完成之后,較大元素將冒到數(shù)組最末端
                    for(j = 0; j < length - 1 - i; j++)//每趟需要比較N-i次比較
                        if(Double.parseDouble(array[j].toString()) > Double.parseDouble(array[j + 1].toString())){
                            swap(array, j, j 
    + 1);
                        }

                    }

                    print(array);
                }

            }
    else if(order == DESC){  //降序排序
                for(int i = 0, j; i < length - 1; i++){  //N個(gè)數(shù)需N-1趟,每趟完成之后,較小元素將冒到數(shù)組最末端
                    for(j = 0; j < length - 1 - i; j++)//每趟需要比較N-i次
                        if(Double.parseDouble(array[j].toString()) < Double.parseDouble(array[j + 1].toString())){
                            swap(array, j, j 
    + 1);
                        }

                    }

                    print(array);
                }

            }

        }

    }



    解釋一下上面代碼中用粉紅色標(biāo)記出來(lái)的代碼的我的用意,正如你看到的 if(order == ASC)else if(order == DESC) 大括號(hào)體里面的代碼幾乎是一模一樣的,
    沒(méi)錯(cuò),我是在 if(order == ASC) 里寫(xiě)完一次然后將它拷貝到 else if(order == DESC) 體里面的,很明顯,if 和 else if 可以合并到一起寫(xiě)在第二層 for 循環(huán)里面,
    這樣一來(lái)既減少了代碼量,看起來(lái)也比較舒服清晰,我沒(méi)有這樣做,是因?yàn)?order == ASC 或 order == DESC 只需要判斷一次,而不需要每次進(jìn)入 第二層 for
    循環(huán)每次都要判斷,這樣做是無(wú)用功,代碼不是寫(xiě)起來(lái)漂亮看起來(lái)舒服效率就高;
    臨時(shí)變量 j,我將 j 的定義放到第一層 for 循環(huán)里,我不確定這樣做是不是一種好的做法,很多人也許是習(xí)慣性的在 for 里當(dāng)需要臨時(shí)變量時(shí)直接定義,或?qū)?br />臨時(shí)變量定義到 for 循環(huán)體外面(這種更糟糕),但不管怎么樣,我的看法是,在這里 j 只需要被定義一次,當(dāng)?shù)谝粚?for 結(jié)束,j 的作用域也將結(jié)束,但由于
    j 是基本數(shù)據(jù)類型中的 int,由于數(shù)據(jù)共享,將 j 定義到 第二層 for 里面也許不是不可,呵,以上純屬個(gè)人看法 ... ...


    測(cè)試類:TestApp.java

    package sort;
    /**
     * -----------------------------------------
     * @文件: TestApp.java
     * @作者: fancy
     * @郵箱: fancydeepin@yeah.net
     * @時(shí)間: 2012-7-18
     * @描述: 測(cè)試類
     * -----------------------------------------
     
    */

    public class TestApp {

        
    public static void main(String[] args) {
            Object[] array 
    = {9,5,7,1,6,3,8,10,4,2};
            (
    new BubbleSort()).bubbleSort(array, BubbleSort.ASC);
        }

    }



    10 個(gè)數(shù)需要排序 9 趟,每趟結(jié)束后,較大的數(shù)(這里是升序)將冒到最末端 ---> 后臺(tái)打印結(jié)果:

    5    7    1    6    3    8    9    4    2    10    
    5    1    6    3    7    8    4    2    9    10    
    1    5    3    6    7    4    2    8    9    10    
    1    3    5    6    4    2    7    8    9    10    
    1    3    5    4    2    6    7    8    9    10    
    1    3    4    2    5    6    7    8    9    10    
    1    3    2    4    5    6    7    8    9    10    
    1    2    3    4    5    6    7    8    9    10    
    1    2    3    4    5    6    7    8    9    10





      
    posted on 2012-07-18 15:25 fancydeepin 閱讀(689) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 97国免费在线视频| 波多野结衣亚洲一级| 亚洲色无码专区在线观看| 久99精品视频在线观看婷亚洲片国产一区一级在线| 免费黄色一级毛片| 日韩成全视频观看免费观看高清| 拍拍拍又黄又爽无挡视频免费| 成人免费福利电影| 永久免费观看的毛片的网站| 国产不卡免费视频| 亚洲区不卡顿区在线观看| 亚洲区小说区激情区图片区| 亚洲AV中文无码字幕色三| 午夜亚洲AV日韩AV无码大全| 久久亚洲春色中文字幕久久久| 亚洲高清日韩精品第一区| 亚洲大尺码专区影院| 亚洲中文字幕久久精品蜜桃| 精品国产_亚洲人成在线| 成年大片免费视频播放一级| 最近免费字幕中文大全| 日韩免费人妻AV无码专区蜜桃| 亚欧免费视频一区二区三区| 24小时免费直播在线观看| 国产精品另类激情久久久免费| 伊人久久亚洲综合影院| 狠狠综合久久综合88亚洲| 亚洲成色WWW久久网站| 亚洲精品自在线拍| 在线观看免费黄色网址| 日本中文字幕免费高清视频| 一色屋成人免费精品网站| 日韩成人免费在线| 亚洲色爱图小说专区| 亚洲精品国产免费| 豆国产96在线|亚洲| 中文永久免费观看网站| 最近中文字幕免费完整| 国产一区二区三区免费在线观看| 亚洲啪啪AV无码片| 亚洲日韩一区精品射精|