目錄(?)[+] 插入排序演算法介紹
排序演算法是最簡單的演算法,也是最基本的演算法。顧名思義,插入排序就是把當前待排序的元素插入到一個已經排好序的列表裡面。 一個非常形象的例子就是右手抓取一張撲克牌,並把它插入左手拿著的排好序的撲克裡面。插入排序的最壞已耗用時間是O(n2), 所以並不是最優的排序演算法。特點是簡單,不需要額外的儲存空間,在元素少的時候工作得好。 插入排序演算法Java實現
Java裡面有很多資料類型,我們選取的是最簡單的整數,但這並不失一般性。即使是自己定製化的對象,實現了java.lang.Comparable, 把對應的 大於符號(>)以及小於符號(<)換成compareTo即可。
由於需要頻繁的操作以及列印數組,先寫一個小的數組工具類。代碼如下: [java] view plain copy 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實現以及測試代碼如下: [java] view plain copy 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); } }