算法之插入排序

輸入:n個數的一個序列{a1,a2,...,an}。

輸出:輸入序列的一個排列{a1',a2',..., an'},滿足a1' <= a2' <= ... <= an' 。


算法思想:插入排序就的工作方式就像你打牌時會排序一手撲克牌,我們每次從桌子上拿出一張牌,都會插入到相應的位置,使得我們手中的牌一直都是有序的。插入排序就如抓牌一樣,先將數組中的第一個放在第一個,取出第二個放在對應位置,然後再依次插入,直到所有的元素都執行完,得到的序列就是排好序的。

算法僞代碼:

<pre name="code" class="java">INSERTION-SORT(A)

for j = 2 to A.length
	key = A[j]
	//插入A[j]到排好序的數組A[1..j-1]中
	i= j -1
	while i > 0 and A[i] > key
		A[i+1] = A[i]
		i = i - 1
	A[i+1] = key


java代碼示例:

public static <E extends Comparable<E>> void InsertionSort(E[] A) {
    E key;
    int i,j;
    for(j=1;j<A.length;j++) {
        key = A[j];
        i = j -1 ;
        while(i>0 &&  A[i].compareTo(key)>0) {
            A[i+1] = A[i];
            i = i-1;
        }
        A[i+1] = key;
    }
}

算法分析:

插入排序算法最優情況是當序列已經是要求的有序時,不需要移動任何元素,此時的時間是n的線性函數
插入排序的最差情況是當序列爲完全逆序時,它需要將每個元素都要移動,此時效率就非常低,時間複雜度是n的平方
插入排序算法簡單易懂,但是當數據量很大後且其中的數據並不怎麼有序時,它的執行效率十分低,因此我們平常並不使用此排序算法,當數據量比較小且序列較有序時可以適當採用此排序算法,因此真正寫程序時,並不推薦此種排序算法


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章