排序算法——折半插入排序

折半插入排序基本思想:

折半插入即充分利用前面有序的特点,进行排序。先进行折半查找,找到合适位置后,再进行将待排元素插入该位置。

案例:

代码:

void BinaryInsertSort(Sqlist *L)
{
    int i, j, low, high, mid;
    for (i = 2; i <= L->length; i++)
    {
        L->R[0] = L->R[i];//设置哨兵
        low = 1;
        high = i - 1;
        while (low <= high)//利用折半查找的算法查找插入的位置
        {
            mid = (low + high) / 2;
            if (L->R[0].key < L->R[mid].key)
            {
                high = mid - 1;
            }
            else
            {
                low = mid + 1;
            }
        }
        for (j = i - 1; j >= high+1; j--) //元素后移,腾出空位供待插入元素存放
        {
            L->R[j+1] = L->R[j]; 
        }
        L->R[high+1] = L->R[0];//将当前待排序插入到指定位置
    }
}

分析:

1.时间复杂度为O(n^2),只是减少了查找位置的时间,并没有减少移动元素的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值