演算法入門學習 1 3插入排序

2021-08-14 22:06:46 字數 1270 閱讀 4976

乙個陣列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...