1. 程式人生 > >基礎演算法——插入排序的思路

基礎演算法——插入排序的思路

package Algorithm;

import java.util.Arrays;

/**
 * 
 * @author Liuyf 插入排序 基礎思路:類似玩撲克牌,左手持拍,右手抓拍,每次將右手新抓的牌插入到左手牌中相應的位置去
 */
public class InsertSort {

	public static void main(String[] args) {
		int[] oldNum = { 3, 1, 5, 7, 2, 4, 9, 6 };// 基礎資料,未排序之前的資料
		InsertSort sort = new InsertSort();
		int[] newNum = sort.insertSort(oldNum);
		System.out.println(Arrays.toString(newNum));
	}

	/**
	 * 定義插入排序主方法
	 * 
	 * @param nums  待排序的陣列
	 *           
	 * @return 完成插入排序的陣列
	 */
	int[] insertSort(int[] nums) {
		int i, j, insertNum;// i迴圈中使用 insertNum要插入的資料
		for (i = 1; i < nums.length; i++) { //當前陣列長度為8,迴圈7次就可以了 直接拿第二個和第一個比較
			insertNum = nums[i];//第一次要插入排序的值從第二個取出來,與元陣列第一個值比較 i的值為1 取出陣列下標為num[1]也就是第二個值
			j = i - 1;//確定將要判斷的數字的位置
			while (j >=0 && nums[j] > insertNum) {//第一次判斷迴圈開始條件為:陣列的第一個值大於我們取出的來的第二個值的時候 這裡做比較的是3,1
					nums[j+1]=nums[j];//將這兩個值的位置交換 :將1移動到3前邊來
					j=j-1;//重新確定下一次判斷的位置
			}
			nums[j+1]=insertNum;
			//System.out.println(Arrays.toString(nums)); //取消註釋檢視每次排序情況 
		}
		return nums;
	}
}