1. 程式人生 > >插入排序(Insertsort)之Java實現

插入排序(Insertsort)之Java實現

插入排序演算法介紹

排序演算法是最簡單的演算法,也是最基本的演算法。顧名思義,插入排序就是把當前待排序的元素插入到一個已經排好序的列表裡面。 一個非常形象的例子就是右手抓取一張撲克牌,並把它插入左手拿著的排好序的撲克裡面。插入排序的最壞執行時間是O(n2), 所以並不是最優的排序演算法。特點是簡單,不需要額外的儲存空間,在元素少的時候工作得好。

插入排序演算法Java實現

Java裡面有很多資料型別,我們選取的是最簡單的整數,但這並不失一般性。即使是自己定製化的物件,實現了java.lang.Comparable, 把對應的 大於號(>)以及小於號(<)換成compareTo即可。

由於需要頻繁的操作以及列印陣列,先寫一個小的陣列工具類。程式碼如下:

public class ArrayUtils {
	
	public static void printArray(int[] array) {
		System.out.print("{");
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i]);
			if (i < array.length - 1) {
				System.out.print(", ");
			}
		}
		System.out.println("}");
	}
}

從陣列的第二個元素開始,取得當前待處理的元素,插入到當前元素之前的子數組裡面,直到陣列的末尾。插入排序的Java實現以及測試程式碼如下:

public class InsertSortTest {
	public static void insertSort(int[] array) {
		if (array == null || array.length < 2) {
			return;
		}

		for (int i = 1; i < array.length; i++) {
			int currentValue = array[i];
			int position = i;
			for (int j = i - 1; j >= 0; j--) {
				if (array[j] > currentValue) {
					array[j + 1] = array[j];
					position -= 1;
				} else {
					break;
				}
			}

			array[position] = currentValue;
		}
	}

	public static void main(String[] args) {
		int[] array = { 3, -1, 0, -8, 2, 1 };
		ArrayUtils.printArray(array);
		insertSort(array);
		ArrayUtils.printArray(array);
	}
}