插入排序的核心是將標記元素左側視為有序(即已經排序好的元素),然後用標記元素與左側元素從右往左進行比較,若比較元素比標記元素大,則兩者交換位置,直到左側比較元素比標記元素小,則迴圈結束,即將標記元素插入該位置
private
long
a;private
int nelems;
public
void
insertionsort()
a[in]
= temp;
//標記元素插到指標指向位置
}}
最外層迴圈,out從1開始,與0號元素進行比較並插入,即視為0號元素為有序,後面以此類推。
插入排序的演算法效率:
在第一次排序,最多比較一次,
在第二次排序,最多比較兩次
。。。最後一次最多,一共比較n-1次(n為陣列長度即元素個數)
所以–>
1+2+3+…+n-1=n*(n-1)/2
然而,平均每次真的比較的次數只有一半,所以除以2得到n*(n-1)/4
複製的次數大致等於比較的次數,然而,複製和比較的時間耗費不同,所以相對隨機資料,這個演算法比氣泡排序快一倍,比選擇排序略快。
但是時間級還是o(n2)。
但是如果資料基本有序,那麼while的條件基本為假,所及成了乙個簡單的一次迴圈,執行n-1次。這種情況下,時間複雜度為o(n)。
Java初級排序演算法 選擇排序 插入排序 希爾排序
package sort import edu.princeton.cs.algs4.in public class example private static boolean less comparable v,comparable w private static void exch comp...
初級排序演算法之選擇排序和插入排序
前情摘要 現在我們學了一些基礎的資料結構,如鍊表,佇列,棧,等等。現在我們開始學習一些非常基礎的排序演算法。今天我們要講的是選擇排序,插入排序以及對插入排序的優化 希爾排序。選擇排序 基礎原理 比如說我們的輸入模型是有限的陣列,對陣列中的元素進行排序。對於選擇排序來說就是從該陣列中找出第乙個最小的元...
演算法筆記2 初級排序 插入排序和希爾排序
插入排序 author xy suppresswarnings rawtypes public class insertsort public static void sort comparable v,int lo,int hi public static boolean less compara...