算法——排序——选择排序(1)——直接插入排序

 

 

什么是直接插入排序(Straight Insertion Sort)

简单来说就是将一条记录插入到已经排好序的有序表里面。通常是假设第一个已经排好序,后面的从第二个开始抽出来和前面的进行直接插入排序。

代码实现

void InsertSort(int* a, int len)
{ //直接插入排序,假设是从小往大排序
for (int i = 1; i < len; i++)
{
for (int j = 0; j < i; j++)//因为前面是已经排好序了,所以从前往后比大小就好
{
if (a[i] < a[j])
{
int temp = a[i];
//如果说比前面已经按从小到大排好序的小,那么就比后面的都小
//就将要插入的位置到原本的位置整体往后移动
//然后再插入要插入的数
for (int k = i - 1; k >= j; k--)
{
a[k + 1] = a[k];
}
a[j] = temp;
break;
}
}
}
for (int i = 0; i < len; i++)
{
cout << a[i] << " ";
}
cout << endl;
}

 

算法效率

因为移动只有一次所以可以不用计算,比较的次数才是关键的。假设是最坏情况,每次都需要比较到最后一个,就是1+2+3+......n-1= T(n)=O(n的平方)