圖解算法系列之插入排序(優化版)
阿新 • • 發佈:2018-12-09
(1)演算法描述
對於給定的一個線性空間,遍歷考察每一個元素,將當前元素拷貝一份,並將前一個元素拷貝到當前元素的原位置。拷貝出來的元素與前一個元素進行比較,如果滿足前一個元素大於或小於當前元素就將當前拷貝出來的元素放到當前位置,否則繼續向前比較。
(2)圖解演算法
(3)C/C++程式碼實現
Custom.h
void insertionAdvancedSort(int arr[], int number);
Custom.cpp
void insertionAdvancedSort(int arr[], int number) { // 一次比較每一個元素 for (int i = 0; i < number; i++) { // 假設當前的元素就是最大值 int current = arr[i]; int j; // j > 0表示確保比較的元素沒有到頭 // arr[j-1] > max表示當前元素max比指定的元素arr[j-1]小 for (j = i; j > 0 && arr[j - 1] > current; j--) { // 交換元素 arr[j] = arr[j-1]; } // 當前這個元素與指定的元素交換 arr[j] = current; } }
(4)Java程式碼實現
public class InsertionSortAdvanced { public static void sort(int[] arr, int number) { for (int i = 0; i < number; i++) { int current = arr[i]; int j; for (j = i; j > 0 && arr[j-1] > current; j--) { arr[j] = arr[j-1]; } arr[j] = current; } } }
(5)時間複雜度分析
在最壞的情況下,時間複雜度仍然是O(n^2)。