排序演算法之三 插入排序

2021-09-26 07:49:51 字數 1780 閱讀 4058

插入排序(insertion sort)是一種簡單直觀且穩定的排序演算法。

插入排序類似於打撲克牌,從第二張牌開始插入,小的插到大的前面,然後使其有序。再拿第三張牌來,找到合適的位置繼續插入,使這三張有序。在第四張直至全部插入有序。

空間複雜度:o(1)

穩定性:穩定

假設存在這樣乙個陣列a[5],陣列中存在有5個10以下的數:

a[5]

=[5,

3,4,

7,2]

;

將陣列中第乙個數看做是乙個有序序列,即a[1] = [5],再把陣列剩下的數看做乙個無序序列,即a[4] = [3,4,7,2]

從頭到尾依次掃瞄無序序列,將掃瞄到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的後面)

即:

a[1]

=[5]

-> a[2]

=[5,

3]-> a[2]

=[3,

5]a[2

]=[3

,5]-

> a[3]

=[3,

5,4]

-> a[3]

=[3,

4,5]

a[3]=

[3,4

,5]-

> a[4]

=[3,

4,5,

7]a[4

]=[3

,4,5

,7]-

> a[5]

=[3,

4,5,

7,2]

-> a[5]

=[2,

3,4,

5,7]

至此,插入排序完畢

從第乙個元素開始,該元素可以認為已經被排序

取出下乙個元素,在已經排序的元素序列中從後向前掃瞄

如果該元素(已排序)大於新元素,將該元素移到下一位置

重複步驟3,直到找到已排序的元素小於或者等於新元素的位置

將新元素插入到下一位置中

重複步驟2~5

public

class

insertsort

implements

iarraysort

// 存在比其小的數,插入

if(j != i)

}return arr;}}

/** * 插入排序

* 第乙個數不用管

* 比大小:乙個數與所有他前面的數比大小,找到比他小的就停止

* 比他大的就往後移乙個位置,比他小的,就插入在這個小的後面

*/public

class

demo8

system.out.

println

(arrays.

tostring

(a))

;int tmp;

int j;

for(

int i=

1;i)else

} a[j+1]

=tmp;

} system.out.

println

(arrays.

tostring

(a));}

}

八大排序演算法之(三)插入排序 折半插入排序

折半插入排序演算法原理 把乙個新的元素插入已經拍好順序的陣列的過程中,尋找插入位置時,將待插入區域的首元素設定為a left 末元素設定為a right 比較時,將待插入元素與a mid 其中mid left right 2相比較,如果比參考元素小,則選擇a left 到a mid 1 為新的插入區...

排序演算法(三)插入排序

今天來更新排序演算法中的第三種演算法 插入排序插入排序是基於比較的排序。所謂的基於比較,就是通過比較陣列中的元素,看誰大誰小,根據結果來調整元素的位置 因此,對於這類排序,就有兩種基本的操作 比較操作 交換操作其中,對於交換操作,可以優化成移動操作,即不直接進行兩個元素的交換,還是用乙個樞軸元素 t...

排序演算法(三) 插入排序

一 直接插入排序 最差時間複雜度 o n 2 最優時間複雜度 o n 平均時間複雜度 o n 2 穩定性 穩定 直接插入排序 insertion sort 是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對未排序的資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序演算法的一般...