java實現插入排序(思路和實現)
阿新 • • 發佈:2019-01-29
插入排序(英語:Insertion Sort)是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。
插入排序分析
效果圖:
程式碼實現:
public class Insert { public static void main(String[] args) { int[] ins = {2,3,5,1,23,6,78,34}; int[] ins2 = sort(ins); for(int in: ins2){ System.out.println(in); } } public static int[] sort(int[] ins){ for(int i=1; i<ins.length; i++){ for(int j=i; j>0; j--){ if(ins[j]<ins[j-1]){ int temp = ins[j-1]; ins[j-1] = ins[j]; ins[j] = temp; } } } return ins; } }
針對上面的這個排序演算法改進:首先上面的這個每次替換都要定義一個temp賦值需要插入的數,這樣會造成不必要的浪費:
所以我們可以吧所有的大於需要插入的數先儲存,然後進行比較,然後將最後的正確位置空出來。吧之前儲存的需要插入的數放到正確位置上;
程式碼:
public static int[] sort2(int[] ins){ for(int i=1; i<ins.length; i++){ int temp = ins[i];//儲存每次需要插入的那個數 int j; for(j=i; j>0&&ins[j-1]>temp; j--){//這個較上面有一定的優化 ins[j] = ins[j-1];//吧大於需要插入的數往後移動。最後不大於temp的數就空出來j } ins[j] = temp;//將需要插入的數放入這個位置 } return ins; }