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

折半插入排序基本思想:

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

案例:

代码:

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),只是减少了查找位置的时间,并没有减少移动元素的时间。

猜你喜欢

转载自blog.csdn.net/fu_jian_ping/article/details/89004463