常见排序算法(一)

这几天我看了一些公司招聘笔试+面试题目,发现他们对计算机基础课考察还是比较多的,其中排序算法最为常见,我在这里自己总结一下,以备战今年秋季校招。
从今天开始,每天学习一种常见排序算法,今天学的是直接插入排序。
原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。
要点:设立哨兵,作为临时存储和判断数组边界之用。

void InsertSort (Type R[], int length)
{
    int i,j;//有序去和无序去指针
    for(i=1; i<length; i++)
    {
        j=i+1;
        if(R[j]<R[i])
        {
            R[0] = R[j];
            while(R[0] < R[i])
            {
                R[i+1]=R[i];
                i--;
            }
            R[i+1] = R[0];
        }
        i=j-1;//还原有序去指针
    }
}

直接插入排序算法简便,比较适用于待排序记录数目较少且基本有序的情况。当待排记录数目较大时,直接插入排序的性能就不好, 为此我们可以对直接插入排序做进一步的改进。在直接插入排序法的基础上,从减少“比较关键字”和“移动记录”两种操作的次数着手来进行改进。

你可能感兴趣的:(插入排序)