1. 程式人生 > >java資料結構與演算法____插入排序

java資料結構與演算法____插入排序

import java.util.Arrays;
 
/**
 * @author God
 * 有一個已經有序的資料序列,要求在這個已經排好的資料序列中插入一個數,
 * 但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,
 * 插入排序的基本操作就是將一個數據插入到已經排好序的有序資料中,從而得到一個新的、
 * 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為O(n^2)。是穩定的排序方法。
 * 插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後一個元素除外(讓陣列多一個空間才有插入的位置),
 * 而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。
 * 插入排序的基本思想是:每步將一個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。
 */
public class InsertionSort {
	public static void main(String[] args) {
		//定義簡短陣列方便檢視
		int[] ary = { 4, 3, 2, 1};
		//遍歷
		for (int i = 1; i < ary.length; i++) {
			//定義臨時變數
			int temp = ary[i];
			System.out.println("臨時變數temp =ary[i]__:"+temp+"___=ary[i]=__:"+ary[i]);
			int j=0;
			System.out.println("初始化的j__=:"+j);
			for (j = i - 1; j >= 0 && temp < ary[j]; j--) {
				System.out.println("迴圈內ary[j+1]=ary[j]____:ary[j+1]="+ary[j+1]+"___ary[j]="+ary[j]);
				ary[j + 1] = ary[j];
			}
			ary[j + 1] = temp;
			System.out.println("ary[j + 1] = temp___ary[j + 1]="+ary[j + 1]+"____temp="+temp);
			System.out.println("第"+i+"一次遍歷排序後為"+Arrays.toString(ary)+"\n__________________________________________");
		}
	}
}