排序算法

直接插入排序,時間復(fù)雜度為O(n^2)

分析:假設(shè)是從小到大排序曲初,將數(shù)組分為已經(jīng)排序的與未排序的囚玫,將未排序的元素逐一插入有序的那部分坑雅,直至所有的元素都在有序的部分。

  • 將長度為n的第一個元素視作有序的那部分S,取無序的那部分的第一個元素按声,即是數(shù)組的第二個元素插入S膳犹;
  • 將第三個元素插入S;
    .....
  • 第n個元素插入S签则,排序完成须床;

將元素T插入有序數(shù)組S的方法:從尾到頭取S的元素S[i],若S[i]>T渐裂,將S[i]向右移動一位豺旬,如此繼續(xù)比較S[i-1]、S[i-2]...柒凉,直到出現(xiàn)不比T小的元素族阅,結(jié)束移動并插入T。

public static void insertSort(int[] arr) {
        int len = arr.length;
        int tmp;
        for (int i = 1; i < len; i++) {
            tmp = arr[i];//用來比較的目標元素
            int j = i - 1;//取有序組的尾部索引

            //移動膝捞,只要比目標大坦刀,就往右移,給新人空出位置
            while (j >= 0 && tmp < arr[j]) {
                arr[j + 1] = arr[j];//有序組元素比目標元素大蔬咬,說明目標元素需要放入其后鲤遥,向右移動一位
                j--;//索引移動
            }

            //移動結(jié)束,新人填坑
            arr[j + 1] = tmp;
        }
    }

折半插入排序林艘,其實是在有序組做查找時用了“二分法查找”盖奈,提高效率

/**
     * 折半插入排序法,直接插入排序的改進版狐援,
     * 采用二分查找法钢坦,減少比較次數(shù)
     *
     */
    public static void insertHalfSort(int[] arr) {
        int Len = arr.length;
        int tmp,high,low,midle;
        for (int i = 1; i < Len ; i++) {
            tmp = arr[i];
            low = 0; high = i -1;
            
            //二分法查找目標元素的插入位置
            while(low <= high){
                midle = (low + high)/2;
                if(tmp > arr[midle]){
                    low = midle + 1;
                }else {
                    high = midle - 1;
                }
            }
            
            //有序組中目標位置及往后的元素,向后移動一位
            for(int j =i -1; j >= high +1;j --){
                System.out.println(j);
                arr[j + 1] = arr[j];
            }
            
            //插入目標元素
            arr[high + 1] = tmp;
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咕村,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚊俺,更是在濱河造成了極大的恐慌懈涛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泳猬,死亡現(xiàn)場離奇詭異批钠,居然都是意外死亡,警方通過查閱死者的電腦和手機得封,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門埋心,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忙上,你說我怎么就攤上這事拷呆。” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵茬斧,是天一觀的道長腰懂。 經(jīng)常有香客問我,道長项秉,這世上最難降的妖魔是什么绣溜? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮娄蔼,結(jié)果婚禮上怖喻,老公的妹妹穿的比我還像新娘。我一直安慰自己岁诉,他們只是感情好锚沸,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唉侄,像睡著了一般咒吐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上属划,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天恬叹,我揣著相機與錄音,去河邊找鬼同眯。 笑死绽昼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的须蜗。 我是一名探鬼主播硅确,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼明肮!你這毒婦竟也來了菱农?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤柿估,失蹤者是張志新(化名)和其女友劉穎循未,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秫舌,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡的妖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了足陨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫂粟。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖墨缘,靈堂內(nèi)的尸體忽然破棺而出星虹,到底是詐尸還是另有隱情零抬,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布搁凸,位于F島的核電站媚值,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏护糖。R本人自食惡果不足惜褥芒,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫡良。 院中可真熱鬧锰扶,春花似錦、人聲如沸寝受。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽很澄。三九已至京闰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甩苛,已是汗流浹背蹂楣。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留讯蒲,地道東北人痊土。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像墨林,于是被迫代替她去往敵國和親赁酝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355