插入排序(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 是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對未排序的資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序演算法的一般...