五、Java版直接插入排序算法

一、核心思想

抽出一個(gè)元素,在其前面的元素中找到適當(dāng)?shù)奈恢眠M(jìn)行插入。
插入排序法:所謂插入排序法乃是將一個(gè)數(shù)目插入該占據(jù)的位置。

假設(shè)我們輸入的是 “53,27,36,15,69, 42” 我們從第二個(gè)數(shù)字開始,這個(gè)數(shù)字是27,我們的任務(wù)只要看看27有沒有正確的位置,我們的做法是和這個(gè)數(shù)字左邊的數(shù)字來比,因此我們比較27和53,27比53小,所以我們就交換27和53,原來的排列就變成了“27, 53, 36, 15, 69, 42 ”

接下來,我們看第3個(gè)數(shù)字有沒有在正確的位置。這個(gè)數(shù)字是36,它的左邊數(shù)字是53,36比53小,所以我們將36和53交換,排列變成了 “27,36, 53, 15, 69, 42 "我們必須繼續(xù)看36有沒有在正確的位置,36的左邊是27,27比36小,36就維持不動(dòng)了,這時(shí)候排序還是“27, 36, 53, 15, 69, 42 "。

再來看第四個(gè)數(shù)字,這個(gè)數(shù)字是15,我們將15和它左邊的數(shù)字相比,都比15大,所以就將15一路往左移動(dòng),這時(shí)候排序變成了 “15, 27, 36, 53, 69, 42 ”。

再來看第五個(gè)數(shù)字,這個(gè)數(shù)字是69,我們將69和它左邊的數(shù)字相比,都比69小,所以就69維持不動(dòng)了,這時(shí)候排序變成了 “15, 27, 36, 53, 69, 42 ”

最后,我們檢查第六個(gè)數(shù)字,這個(gè)數(shù)字是42,42必須往左移,一直移到42的左邊是36為止,所以我們的排列就變成了 “15, 27, 36, 42 ,53, 69”排序因此完成了。

image.png

二、源碼

package com.ctw;

/**
 * @author TongWei.Chen 2018-09-26 14:16:52
 * @Description:
 * @Project sjjg-sf
 */
public class InsertSort {

    public static void insertSort(long[] array) {
        int i, j;
        // 要插入的數(shù)據(jù)
        long insertNode;
        // 從數(shù)組的第二個(gè)元素開始循環(huán)將數(shù)組中的元素插入
        for (i = 1; i < array.length; i ++) {
            // 設(shè)置數(shù)組中的第二個(gè)元素為第一次循環(huán)要插入的數(shù)據(jù)
            insertNode = array[i];
            j = i - 1;
            // 若要插入的元素小于第j個(gè)元素,則將第j個(gè)元素向后移動(dòng)
            while ((j >= 0) && insertNode < array[j]) {
                array[j + 1] = array[j];
                j --;
            }
            // 直到要插入的元素不小于第j個(gè)元素,將insertNode插入到數(shù)組中
            array[j + 1] = insertNode;
        }
    }

    public static void main(String[] args) {
        MyArray array = new MyArray();
        array.add(111L);
        array.add(13L);
        array.add(31L);
        array.add(211L);
        array.add(11L);
        array.add(12L);
        array.add(23L);
        array.add(31L);
        array.add(41L);
        array.add(551L);

        insertSort(array.getArr());

        array.display();
    }

}

三、廣告

  • 碼云地址

    https://gitee.com/geekerdream/

  • QQ群【Java初學(xué)者學(xué)習(xí)交流群】:458430385

  • 微信公眾號(hào)【Java碼農(nóng)社區(qū)】

    img
  • 今日頭條號(hào):編程界的小學(xué)生

最后編輯于
?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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