插入排序,一般也被稱為直接插入排序。對於少量元素的排序,它是乙個有效的演算法。
1.1 演算法思想
每一次將乙個待排序的元素,按其關鍵字大小插入到有序佇列的合適位置,直到全部元素插入完成為止。
假設有一組無序序列r0,r1, … ,rn-1。
將序列中下標為 0 的元素視為元素個數為 1 的有序序列。
依次把r1,r2, … ,rn-1插入到有序序列中。所以,需要乙個從下標1到n-1的外部迴圈去掃瞄 。
插入過程,將ri插入到前面有序的序列中,ri和r0~ri-1進行比較,確定要插入的合適位置。
做乙個內部迴圈,從後往前比較,即從下標i-1開始向0進行掃瞄。
1.2 **實現
#include
#include
using
namespace std;
vector<
int>
insertsort
(vector<
int> list)
result = list;
// 第1個數肯定是有序的,從第2個數開始遍歷,依次插入有序序列
for(
int i =
1; i < result.
size()
; i++
) result[j +1]
= temp;
}return result;
}void
main()
; vector<
int>
test
(arr, arr +
sizeof
(arr)
/sizeof
(arr[0]
)); cout <<
"排序前"
<< endl;
for(
int i =
0; i < test.
size()
; i++
) cout << endl;
vector<
int> result;
result =
insertsort
(test)
; cout <<
"排序後"
<< endl;
for(
int i =
0; i < result.
size()
; i++
) cout << endl;
system
("pause");
}
1.3 時間複雜度
在插入排序中,當待排序陣列是有序時,是最優的情況,只需當前數跟前乙個數比較一下就可以了,這時一共需要比較n- 1次,
時間複雜度為o(n)。
最壞的情況是待排序陣列是逆序的,此時需要比較次數最多,總次數記為:1+2+3+…+n-1,所以,插入排序最壞情況下的時間
複雜度為o(n2)。
平均來說,a[1…j-1]中的一半元素小於a[j],一半元素大於a[j]。插入排序在平均情況執行時間與最壞情況執行時間一樣,是輸
入規模的二次函式。
1.4 空間複雜度
插入排序的空間複雜度為常數階o(1)。
插入排序總結
典型的比較排序演算法 插入排序 堆排序 快速排序。根據演算法導論中出現的先後順序,首先出場的是插入排序 一.原版插入排序偽 1.for j 2 to a.length 為陣列a的長度 2.for i j 1 downto 1 3.if a i a i 1 4.exchange a i with a ...
總結 插入排序
一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 1 從第乙個元素開始,該元素可以認為已經被排序 2 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 3 如果該元素 已排序 大於新元素,將該元素移到下一位置 4 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 5...
插入排序總結
所謂插入排序,就是把一組亂序的資料,依次拿出乙個,放入到一組已經排好序的資料中的正確的位置。又可以分為 直接插入排序 折半插入排序 二路插入排序 表插入排序 希爾排序 一 直接插入排序 相對比較簡單的一種排序方法,就是按照概念一步一步的操作,可以使用乙個for迴圈實現,具體 如下 直接插入排序 vo...