圖解算法系列之插入排序(Low版)
阿新 • • 發佈:2018-12-09
(1)演算法描述
對於給定的線性空間,依次考察每個元素,當指定的元素比後一個元素大(或者小)的時候就交換位置,然後交換過來的後一個元素繼續向前比較,只要比該元素大(或者小)就兩兩交換,直到不符合交換條件或者到達最前端。
(2)演算法圖解
(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)。由於資料的頻繁交換,會使得同等資料情況下插入排序慢與選擇排序。