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

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

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

    午后星期午

    java 插入排序

    不扯太多概念性的東西,簡單點來說,插入排序 將數組所有元素劃分成了有序區和無序區,假設當前數組有 N 個元素,
    開始默認第一個元素(下標為0)所處的位置是有序區,這是局部有序,從第二個元素(i=1)至數組最后一個元素(i=N-1)屬于無序區;
    假設數組元素是按從左至右存放的,如果用 i 來標記無序區中的第一個元素下標,也就是無序區中最左邊或者說是無序區中下標值最小的下標,
    則每趟排序是將下標 i 所指向的有效值插入有序區的適當位置,使得每趟排序完成之后,有序區的所有元素總是保持局部有序狀態。
    按這樣來回 N -1 趟插入之后,則 N 個元素已成有序狀態。

    盡管插入排序的復雜度也是 O(n^2),但一般情況下,插入排序會比冒泡排序快一倍,要比選擇排序還要快一點。


    排序基類:BaseSort.java

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

    public class BaseSort {

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

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

            System.out.println();
        }

    }



    插入排序:InsertSort.java

    package sort;
    /**
     * -----------------------------------------
     * @文件: InsertSort.java
     * @作者: fancy
     * @郵箱: fancydeepin@yeah.net
     * @時間: 2012-7-18
     * @描述: 插入排序
     * -----------------------------------------
     
    */

    public class InsertSort extends BaseSort{
        
        
    /**
         * @方法名:    insertSort 
         * @參數名: array 排序對象
         * @參數名: order 排序順序
         * @描述語:    插入排序:默認第一個是有序,使其余的像紙牌游戲那樣依次插入,復雜度 O(n^2)
         
    */

        
    public void insertSort(Object[] array, int order){
            
    int length = array.length;
            
    if(order == ASC){
                
    for(int i = 1, j; i < length; i++)//默認第1個(下標0)有序,i是無序區第一個元素下標,第i趟結束后,i下移,如此來回 N -1趟
                    for(j = 0; j < i; j++){       //將無序區下標為i所指向的值插入有序區適當位置
                        if(Double.parseDouble(array[j].toString()) > Double.parseDouble(array[i].toString())){
                            swap(array, i, j);
                        }

                    }

                    System.out.println(
    "--------------------------------------------------------------------------->第" + i + "");
                    print(array);
                }

            }
    else if(order == DESC){
                
    for(int i = 1, j; i < length; i++)//默認第1個(下標0)有序,i是無序區第一個元素下標,第i趟結束后,i下移,如此來回 N -1趟
                    for(j = 0; j < i; j++){       //將無序區下標為i所指向的值插入有序區適當位置
                        if(Double.parseDouble(array[j].toString()) < Double.parseDouble(array[i].toString())){
                            swap(array, i, j);
                        }

                    }

                    System.out.println(
    "--------------------------------------------------------------------------->第" + i + "");
                    print(array);
                }

            }

        }

    }



    如需了解上面由粉紅色標記出來的代碼的用意,請參考我 java 分類里的 冒泡排序 這一隨筆 : http://www.tkk7.com/fancydeepin/archive/2012/07/18/java_bubblesort.html


    測試類:TestApp.java

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

    public class TestApp {

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

    }



    后臺輸出打印結果:


    --------------------------------------------------------------------------->第1趟
    5    9    7    1    6    3    8    10    4    2    
    --------------------------------------------------------------------------->第2趟
    5    7    9    1    6    3    8    10    4    2    
    --------------------------------------------------------------------------->第3趟
    1    5    7    9    6    3    8    10    4    2    
    --------------------------------------------------------------------------->第4趟
    1    5    6    7    9    3    8    10    4    2    
    --------------------------------------------------------------------------->第5趟
    1    3    5    6    7    9    8    10    4    2    
    --------------------------------------------------------------------------->第6趟
    1    3    5    6    7    8    9    10    4    2    
    --------------------------------------------------------------------------->第7趟
    1    3    5    6    7    8    9    10    4    2    
    --------------------------------------------------------------------------->第8趟
    1    3    4    5    6    7    8    9    10    2    
    --------------------------------------------------------------------------->第9趟
    1    2    3    4    5    6    7    8    9    10



       [ 轉載出處:http://www.tkk7.com/fancydeepin ]

    posted on 2013-12-31 13:49 午后星期午 閱讀(85) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 久久丫精品国产亚洲av| 丝袜熟女国偷自产中文字幕亚洲| 亚洲日本中文字幕一区二区三区| 亚洲AV无码专区在线厂| 免费理论片51人人看电影| 亚洲天堂男人影院| 好先生在线观看免费播放| 亚洲国产精品白丝在线观看| 久久青草免费91线频观看站街| 久久夜色精品国产亚洲AV动态图| 精品国产免费一区二区三区香蕉| 亚洲AV美女一区二区三区| 69xx免费观看视频| 亚洲激情视频图片| 国产在线观看www鲁啊鲁免费| 免费无毒a网站在线观看| 久久亚洲精品中文字幕三区| 免费国产污网站在线观看15| 亚洲国产成人综合| 国产精品免费小视频| 亚洲免费日韩无码系列| 亚洲综合视频在线| 免费毛片在线看片免费丝瓜视频| 在线观看免费亚洲| 久久久久无码专区亚洲av| 中国一级毛片免费看视频| 91大神亚洲影视在线| 91香蕉视频免费| 一区二区三区免费在线观看| 久久久亚洲欧洲日产国码二区 | 亚洲国产av一区二区三区| 日日摸夜夜添夜夜免费视频| 亚洲AV无码成人精品区蜜桃| 免费a级毛片无码a∨蜜芽试看| 免费国产草莓视频在线观看黄| 亚洲国产天堂在线观看| 免费无码看av的网站| 大地影院MV在线观看视频免费| 亚洲国产成+人+综合| 亚洲精品无码成人片在线观看 | 亚洲男人都懂得羞羞网站|