1. 程式人生 > >排序演算法---插入排序

排序演算法---插入排序

參考網址:https://www.cnblogs.com/onepixel/articles/7674659.html
插入排序(Insertion-Sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。
演算法描述:
一般來說,插入排序都採用in-place在陣列上實現。具體演算法描述如下:

  1. 從第一個元素開始,該元素可以認為已經被排序;
  2. 取出下一個元素,在已經排序的元素序列中從後向前掃描;
  3. 如果該元素(已排序)大於新元素,將該元素移到下一位置;
  4. 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;
  5. 將新元素插入到該位置後;
  6. 重複步驟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;
}