直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。
#include <iostream>
using namespace std;
/************************************************************************/
/*
设数组为a[0…n-1]。
1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1
2. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。
3. i++并重复第二步直到i==n-1。排序完成。 */
/************************************************************************/
void InsertSort(int *L, int n)
{
int i,j,temp;
for (i=1; i<n; i++)
{
if(L[i] < L[i-1])//将L[i]插入有序子表
{
temp = L[i];
for (j=i-1; L[j]>temp; j--)
{
L[j+1] = L[j];
}
L[j+1] = temp;
}
}
}
int main()
{
int L1[9] = {9,1,5,8,3,7,4,6,2};
InsertSort(L1,9);
for (int i = 0; i<9; i++)
{
cout<<L1[i]<<" ";
}
cout<<endl;
getchar();
return 0;
}
结果
直接插入排序法的时间复杂度为O(n^2)。同样的时间复杂度,直接插入排序法比冒泡和简单选择排序的性能要好一些。