排序演算法---插入排序
阿新 • • 發佈:2019-01-02
參考網址:https://www.cnblogs.com/onepixel/articles/7674659.html
插入排序(Insertion-Sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。
演算法描述:
一般來說,插入排序都採用in-place在陣列上實現。具體演算法描述如下:
- 從第一個元素開始,該元素可以認為已經被排序;
- 取出下一個元素,在已經排序的元素序列中從後向前掃描;
- 如果該元素(已排序)大於新元素,將該元素移到下一位置;
- 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;
- 將新元素插入到該位置後;
- 重複步驟2~5。
程式碼如下:
#include<iostream> using namespace std; // 分類 ------------- 內部比較排序 // 資料結構 ---------- 陣列 // 最差時間複雜度 ---- 最壞情況為輸入序列是降序排列的,此時時間複雜度O(n^2) // 最優時間複雜度 ---- 最好情況為輸入序列是升序排列的,此時時間複雜度O(n) // 平均時間複雜度 ---- O(n^2) // 所需輔助空間 ------ O(1) // 穩定性 ------------ 穩定 void InsertSort(int arr[], int n) { int pre_index, current; for (int i = 0; i < n-1; i++) { pre_index = i; current = arr[i + 1]; while (pre_index >= 0 && arr[pre_index]>current) { arr[pre_index + 1] = arr[pre_index]; pre_index--; } arr[pre_index + 1] = current; } } int main() { int arr[] = { 6, 4, 8, 2, 5, 3, 1, 9, 5, 0 }; int n = sizeof(arr) / sizeof(int); InsertSort(arr, n); for (int i = 0; i < n; i++) { cout << arr[i] << endl; } return 0; }