#include <stdio.h>

// 直接插入排序
void insert_sort(int sz[], int len)
{
    for (int i = 2; i < len + 1; i++)
    {
        // 位置0作为哨兵
        sz[0] = sz[i];
        int j;
        // 寻找该插入的位置
        for (j = i - 1; sz[j] > sz[0]; j--)
        {
            sz[j + 1] = sz[j];
        }
        sz[j + 1] = sz[0];
    }
}
// 折半查找插入排序
void half_insert_sort(int sz[], int len)
{
    for (int i = 2; i < len + 1; i++)
    {
        // 位置0作为哨兵
        sz[0] = sz[i];
        // 折半查找该插入的位置
        int low = 1, high = i - 1;
        while (low <= high)
        {
            int mid = (low + high) >> 1;
            if (sz[0] < sz[mid])
                high = mid - 1;
            else
                low = mid + 1;
        }
        for (int j = i - 1; j >= high + 1; j--)
            sz[j + 1] = sz[j];
        sz[high + 1] = sz[0];
    }
}

int main()
{
    // 0位置未用作为哨兵,待排序数组
    int a[] = {0, 5, 10, 8, 100, 50, -10, 60};
    insert_sort(a, 7); // 7为数组实际长度
    //half_insert_sort(a, 7); 
    // 输出排序结果
    for (int i = 1; i < 8; i++)
    {
        printf("%d%c", a[i], i == 7 ? '\n' : ' ');
    }
    return 0;
}

  

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。