直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的记录增加1的有序表。
对于有n个元素的初始序列
k
0
,
k
1
,
k
2
,
.
.
.
,
k
n
−
1
k_0,k_1,k_2,...,k_{n-1}
k0,k1,k2,...,kn−1,整个排序过程进行
n
−
1
n-1
n−1趟插入。第一趟插入时将元素
k
0
k_0
k0看成是一个有序的子序列,然后将元素
k
1
k_1
k1插入到该子序列中。第
n
−
1
n-1
n−1趟插入时将元素
k
n
−
1
k_{n-1}
kn−1插入前面由
n
−
1
n-1
n−1个元素组成的有序子序列中。直接插入排序的一个例子如图1所示。直接插入排序的时间复杂度为
O
(
n
2
)
O(n^2)
O(n2)
![](https://i-blog.csdnimg.cn/blog_migrate/6f4f685402468b69e29c9a1ad929bba6.png#pic_center)
/* Function to print an array */
void printArray(int arr[], int size)
{
int i;
for (i = 0; i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
void StraightInsertSort(int arr[], int n)
{
int insertingKey = 0;
for (int i = 1; i < n; i++)
{
insertingKey = arr[i];
cout << "insertingKey=" << insertingKey << endl;
if (insertingKey < arr[i - 1])
{
int j = 0;
for (j = i - 1; (j >= 0) && (arr[j] > insertingKey); j--)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = insertingKey;
}
}
return;
}
//测试程序
int main()
{
int arr[] = { 10, 7, 8, 9, 1, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
StraightInsertSort(arr, n );
cout << "Sorted array: \n";
printArray(arr, n);
return 0;
}