排序—插入排序

選擇排序

思路:

直接插入排序是一種最簡(jiǎn)單的排序方法,它的基本操作是將一個(gè)記錄插入到已排好的有序的表中,從而得到一個(gè)新的、數(shù)量增1的有序表。

當(dāng)前元素的前面元素均為有序,要插入時(shí),從當(dāng)前元素的左邊開(kāi)始往前找(從后往前找),比當(dāng)前元素大的元素均往右移一個(gè)位置,最后把當(dāng)前元素放在它應(yīng)該呆的位置就行了。

可以想象斗地主右手接牌插入左手已經(jīng)整理好順序的牌的情景,即將一個(gè)牌,從左->右比較,插入到合適位置。

復(fù)雜度分析:

時(shí)間復(fù)雜度為O(n^2)。是穩(wěn)定的排序方法。

package com.itstyle.seckill.common.algorithm;
/**
 * 直接插入排序
 */
public class InsertSort {
    /**
     * 直接插入排序算法
     */
    public static void insertSort(int[] list) {
        int len = list.length ;
        // 從無(wú)序序列中取出第一個(gè)元素 (注意無(wú)序序列是從第二個(gè)元素開(kāi)始的)
        for (int i = 1; i < len; i++) {
            int temp = list[i];
            int j;
            // 遍歷有序序列
            // 如果有序序列中的元素比臨時(shí)元素大,則將有序序列中比臨時(shí)元素大的元素依次后移
            for (j = i - 1; j >= 0 && list[j] > temp; j--) {
                list[j + 1] = list[j];
            }
            // 將臨時(shí)元素插入到騰出的位置中
            list[j + 1] = temp;
        }
    }
}
?著作權(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)容