插入排序

插入排序

插入排序是通過交換位置來達(dá)到排序的目的的,看起來和選擇排序差不多,選擇排序是每一次循環(huán)都找到一個(gè)當(dāng)前的最小值,然后與第一個(gè)元素交換位置,這樣從0到N,每一個(gè)元素依次排好序。插入排序的不同在于它元素交換的次數(shù)是不固定的,如果是一個(gè)已經(jīng)排好序的數(shù)組,那么就不會(huì)交換,考慮最復(fù)雜的情況的話,會(huì)交換(1 + 2 + ... + N-1),而選擇排序會(huì)固定交換N-1次,寫到這里,好像選擇排序可以優(yōu)化一下,如果本身是排好序的,那么選擇排序也不應(yīng)該做多余的交換:

if(min != i) {
    int tmp = arr[i];
    arr[i] = arr[min];
    arr[min] = tmp;
}

插入排序的代碼如下:

private static void insertSort() {
    int[] arr = {5, 1, 7, 3, 0, 8, 2, 6, 4, 9};
    int N = arr.length;
    for(int i=1; i<N; i++) {
        for(int j=i; j>0 && arr[j] < arr[j-1]; j--) {
            int tmp = arr[j];
            arr[j] = arr[j-1];
            arr[j-1] = tmp;
        }
    }

    for(int n=0; n<N; n++) {
        System.out.println(arr[n] + " ");
    }
}

對(duì)于1到N-1之間的每一個(gè)i,將arr[i]與arr[0]到arr[i-1]中比它小的所有元素依次有序地交換,在索引i由左向右變化的過程中,它左側(cè)的元素總是有序的,這樣直到排序完成。很顯然,對(duì)于部分有序的數(shù)組來說,插入排序效率要更高一些。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 算法之插入排序 一:基本概念插入排序(Insert Sort),每次將一個(gè)待排序的數(shù)據(jù)元素,插入到前面已經(jīng)排好序的...
    墨小飛閱讀 312評(píng)論 0 0
  • 上一篇博客我們實(shí)現(xiàn)的數(shù)組結(jié)構(gòu)是無序的,也就是純粹按照插入順序進(jìn)行排列,那么如何進(jìn)行元素排序,本篇博客我們介紹幾種簡...
    IT可樂閱讀 471評(píng)論 0 3
  • 物是人非,只想說一聲,感謝你曾經(jīng)繁華了我的青春!
    放牛的小毛驢閱讀 313評(píng)論 0 0
  • 很喜歡”我是來搞笑的”專題,一入簡書就被它吸引過去了,我自己也寫了一些自以為搞笑但沒幾個(gè)人看的文章。哈哈,都...
    糊涂印象閱讀 444評(píng)論 0 0
  • 言千曦跟傲天回去后,府里寂靜了不少。直到夜宴這幾天,言千凌本應(yīng)是很清閑的,但京城卻又出了另一樁事,遠(yuǎn)比慕頤風(fēng)的盜竊...
    原小尚閱讀 342評(píng)論 1 1

友情鏈接更多精彩內(nèi)容