007's Studio.

算法导论第二章插入排序

字数统计: 344阅读时长: 1 min
2019/07/29 Share

算法导论 第二章插入排序实现

 插入排序算法是时间复杂度为 $O(n)$,输入规模$n$较小时,插入排序往往能有较好的效果。

 最优情况:数据整体有序,无需须交换元素,时间复杂度$O(n)$

 最坏情况:数据整体逆序,每个元素要 $1~n-1$次,时间复杂度为 $O(n^2)$。

 插入排序中的常数因子较小使得在$n$在较小的时候,在很多情况能够运行更快。作为归并排序,快速排序等算法在小规模时处理的问题时的子程序。

书中的伪代码

1
2
3
4
5
6
7
8
9
INSERTION-SORT(A)
1 for j = 2 to A.length
2 key = A[j]
3 //Insert A[j] into the sorted sequence[1..j-1]
4 i = j-1
5 while i > 0 and A[i] > key
6 A[i+1] = A[i]
7 i = i+1
8 A[i+1] = key

具体实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
数组存放位置为[0,len-1]
*/
class InsertSort{
public:
//升序
static void InsertSortInc(int A[],int len){
for(int j=1;j<len;++j){
int i=j-1;
int key=A[j];
while(i>=0&&A[i]>key){
A[i+1]=A[i];
--i;
}
A[i+1]=key;
}
}
//降序
static void InsertSortDec(int A[],int len){
for(int j=1;j<len;j++){
int i=j-1;
int key=A[j];
while(i>=0&&A[i]<key){
A[i+1]=A[i];
--i;
}
A[i+1]=key;
}
}
};

原文作者:007havegone

原文链接:http://007havegone.github.io/2019/07/29/算法导论第二章插入排序/

发表日期:July 29th 2019, 6:00:17 pm

更新日期:July 30th 2019, 4:59:20 pm

版权声明:‘原创内容,转载时请附上出处’

CATALOG
  1. 1. 算法导论 第二章插入排序实现