插入排序算法介紹
排序算法是最簡單的算法,也是最基本的算法。顧名思義,插入排序就是把當前待排序的元素插入到一個已經排好序的列表裏面。 一個非常形象的例子就是右手抓取一張撲克牌,並把它插入左手拿着的排好序的撲克裏面。插入排序的最壞運行時間是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);
- }
- }