算法之插入排序

算法系列之插入排序

时间复杂度:O(n^2)

空间复杂度:O(1)

图示:

插入排序

图中深色的方块代表本次迭代待插入的元素,即程序中的i,每次都要向前比较,找到合适的插入位置,相应的元素依次后移

/** @brief 插入排序
 *
 * @param pData int* 待排序数组
 * @param nSize int 待排序数组大小
 * @return void
 *
 */
void InsertSort( int *pData, int nSize )
{
    for ( int i = 1; i < nSize; ++i )
    {
        int j = i - 1;
        int nTmp = pData[i];

        // 用一个tmp把当前位置的值保存起来,然后依次把tmp值和前面的值想比较
        // 并且把前面的值依次往后移,直到找到合适的插入位置,缺点是即使当前值有序,
        // 也要进行两次赋值,一次给tmp,一次给自己
        while ( j >= 0 && pData[j] > nTmp )
        {
            pData[j + 1] = pData[j];
            --j;
        }

        // 把当前值插入到合适的位置
        pData[j + 1] = nTmp;
    }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值