1. 演算法
將第i筆資料插入到前面i−1筆已經排好的資料當中,形成i筆排好的資料。
void Insert(char *arr, int index){
int former = index-1;
int insert = arr[index];
while (insert < arr[former]){
arr[former+1] = arr[former];
former--;
}
arr[former+1] = insert;
}
void Sort(char *arr){
for (int i = 1; i < strlen(arr); i++)
Insert(arr, i);
}
演算法解析:
input={5,3,8,2,6}
i=1, Insert(input, 1), insert=3while(3<5)⇒5, 5, 8, 2, 6input[0]=insert⇒ 3, 5, 8, 2, 6
2. 性質
Time Complexity: Best Case O(n)
Insertion sorting is a stable sorting method.
3. 其他
Insertion sort主要分成兩個步驟,
找到正確的插入位置(linear search)⇒O(n)
所以可以朝這兩個步驟來改善時間效率。
3.1 Binary Insertion Sort
使用Binary Search找到正確位置⇒O(logn)
3.2 Linear Insertion Sort
找到正確的插入位置(linear search)⇒O(n)
i=2, Insert(input, 2), insert=8while(8<5)⇒×input[2]=insert⇒ 3, 5, 8, 2, 6
i=3, Insert(input, 3), insert=2while(2<8)⇒3, 5, 8, 8, 6,former=1while(2<5)⇒3, 5, 5, 8, 6,former=0while(2<3)⇒3, 3, 5, 8, 6,former=−1input[0]=insert⇒ 2, 3, 5, 8, 6
i=4, Insert(input, 4), insert=6while(6<8)⇒2, 3, 5, 8, 8,former=2while(6<5)⇒×input[3]=insert⇒ 2, 3, 5, 8, 6