插入排序和優化

2021-09-28 20:47:32 字數 1149 閱讀 2817

剛開始的時候,把左面的第乙個數當作是有序的,把從第二個數為起始,以最後乙個數為終止,作為無序的,此時陣列分為有序和無序的兩個小陣列

因為預設左面的第乙個是有序的,所以i從1開始

}插入排序和氣泡排序的區別:兩種排序都是雙層for迴圈,外層for迴圈都是為了確定遍歷多少趟會讓陣列有序,都代表陣列中有序的數的個數(但是兩種排序的表達方式不同),都在內層for迴圈中做數字交換,其不同點在於兩層for迴圈的()內,插入排序的外層for迴圈從i=1開始(因為在陣列中,他預設a[0]為乙個有序的小陣列),迴圈到最後;內層for迴圈代表的是無序陣列中的某乙個數,需要在有序陣列中遍歷多少次(也就是判斷條件:j>i),比如:有序陣列中只有乙個數,那麼這個無序陣列中的這個數隻需要遍歷一次。而氣泡排序,內層for迴圈的判斷條件是j總的來說,插入排序是把無序的數插入到有序的陣列中進行比較,找到無序的數在有序陣列中最合適的位置,而氣泡排序剛開始的時候都是無序的,後面開始有序,但是氣泡排序只能在有序陣列的邊界插入;且著重點不同,插入排序是把無序的數和有序的數比較,並把這個無序的數存放到有序陣列中最適合他的位置;而氣泡排序是把無序的數進行比較,每次找到乙個最值,把此最值存放到有序陣列的邊緣上。

優化

每次替換都要定義乙個temp賦值需要插入的數,這樣會造成不必要的浪費,通過在外層for迴圈中定義乙個temp,然後在內層for迴圈中增加乙個判斷,如果temp比他前面的數小,則讓前面的數覆蓋掉temp陣列所在的位置,然後j–(此時陣列中有兩個數都是a[j-1]),然後進行下一輪內層for迴圈的判斷,若不滿足判斷條件則把temp賦值給此時的j(也就是上一次for迴圈的j-1),類似於快速排序的挖坑法。

public

static

int[

]insertionsort

(int

a)a[j]

=temp;

}return a;

}

插入排序優化

插入排序的是十分常見的o n 2 級別的排序演算法,其排序思路如下 一次迴圈使前n個數都為有序,巢狀的二次迴圈將第n個數插入到前n個數中合適的位置,我的實現 如下 public void insertsort int a,int n else 這個插入排序相對於選擇排序有可以提前結束一層迴圈的特點,...

插入排序及其優化

插入排序 把乙個無序的陣列分為兩部分,一部分為有序 剛開始只有乙個元素 一部分為無序 從第二個元素開始 將無序元素乙個乙個插入到有序元素中。void insertsort int arr,size t size arr j x 直接插入排序耗時的操作有 比較 後移賦值。時間複雜度如下 1 最好情況 ...

插入排序及其優化

複雜度o n 2 用筆模擬過程可輕鬆得出 一 思路 index 0 1 2 3 4 5 value 4 3 2 6 4 8 1 選定起始指標index 0,此時已排好順序的子陣列長度為1 就是list 0 4 2 指標後移,候選元素變為list 1 3,將該元素不斷向左交換到某個位置,使得list ...