1. 程式人生 > >java實現插入排序(思路和實現)

java實現插入排序(思路和實現)

插入排序(英語: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;
	}