1. 程式人生 > >圖解算法系列之插入排序(Low版)

圖解算法系列之插入排序(Low版)

(1)演算法描述

對於給定的線性空間,依次考察每個元素,當指定的元素比後一個元素大(或者小)的時候就交換位置,然後交換過來的後一個元素繼續向前比較,只要比該元素大(或者小)就兩兩交換,直到不符合交換條件或者到達最前端。

(2)演算法圖解

圖解算法系列之插入排序(Low版)

(3)C/C++程式碼實現

CustomSort.h

void insertionSort(int arr[], int number);

CustomSort.cpp

void insertionSort(int arr[], int number) {
     // 一次考察每個元素
    for (int i = 1; i < number; i++) {
        // 從考察的當前元素開始,向後查詢當前元素該放到哪裡
        for (int j = i; j > 0; j--) {
            // 如果當前元素比前一個元素小就交換
            if (arr[j] < arr[j - 1]) {
                int temp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = temp;
            } else {
                //  如果如果沒有比這個元素大的就提前終止
                break;
            }
        }
    }
}

(4) Java程式碼實現

public class InsertionSort {
    public static int[] sort(int[] arr, int number) {
        for (int i = 1; i < number; i++) {
            for (int j = i; j > 0; j--) {
                if (arr[j] < arr[j-1]) {
                    int temp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = temp;
                } else {
                    break;
                }
            }
        }
        return arr;
    }
}

(5)時間複雜度分析

雖然插入排序會在資料滿足約定的情況下提前終止排序,但是最壞的情況下還是O(n^2)。由於資料的頻繁交換,會使得同等資料情況下插入排序慢與選擇排序。