乙個陣列a有n個元素,首先第乙個數不動:
第一次:將
第二個數
從後往前依次和
前面乙個數(
有序陣列
)進行比較,並插入到合適位置m,
然後將原來位置在
m(包括m) 到原來陣列第乙個數 均後移一位
(如果需要插入的數原來位置和它所要插入的數字位置相同,那麼無須移動陣列)(
最差情況比較1次
)。第二次
:將第三個數
從後往前依次和
前面兩個數
(有序陣列
)進行比較,並插入到合適位置m,
然後將原來位置在
m(包括m) 到原來陣列
第二個數 均後移一位
(如果需要插入的數原來位置和它所要插入的數字位置相同,那麼無須移動陣列)
(最差情況比較2次)。
第三次:將第四個數
從後往前依次和
前面三個數
(有序陣列
)進行比較,
並插入到合適位置m,
然後將原來位置在
m(包括m) 到原來陣列
第三個數 均後移一位
(如果需要插入的數原來位置和它所要插入的數字位置相同,那麼無須移動陣列)
(最差情況比較3次)。
................
第n-1次
:將第n個數
和前面n-1個數
(有序陣列
)進行比較,
並插入到合適位置m,
然後將原來位置在
m(包括m) 到 原來陣列第n-1個數 均後移一位
(如果需要插入的數原來位置和它所要插入的數字位置相同,那麼無須移動陣列)
(最差情況比較n-1次)。
時間複雜度:1+2+3+......(n-1)=n*(n-1)/2 所以時間複雜度為 n^2
空間複雜度:①最優的空間複雜度就是開始元素順序已經排好了,則空間複雜度為:0;
②最差的空間複雜度就是開始元素逆序排序了,則空間複雜度為:o(n);
③平均的空間複雜度為:o(1);
穩定性: 穩定
public class charu ;
charudemo(arr);
} public static void show(int arr)
} public static void charudemo(int arr)
else}}
show(arr);
} }
排序演算法入門之 插入排序
借用 演算法導論 裡的例子,就是我們打牌的時候,每新拿一張牌都會把它按順序插入,這,其實就是插入排序。齊姐宣告 雖然我們用打牌的例子,但是可不能學胡適先生啊。對於陣列來說怎麼做呢?有乙個重要的思想,叫做擋板法,就是用擋板把陣列分成兩個區間 那麼排序分三步走 最初擋板是在陣列的最左邊,index 0 ...
插入排序演算法學習
插入排序就如同手裡放了一堆紙牌,把紙牌從左到右進行排序。insert sort a for j 2 to n n為陣列a的長度 do key a j insert a j into the sorted sequence a 1.j 1 i j 1 while i 0 and a i key do ...
演算法學習 插入排序
插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入 實現 public static void insertsort int array if array.length 0 r...