插入排序

排序思路:
每次将一个待排序的元素与已排序的元素进行逐一比较,直到找到合适的位置按大小插入。
这里写图片描述

//直接插入排序
void InsertSort(RecType R[], int n)
{
    int i,j; RecType tmp;
    for(i=1;i<n;i++)
    {
        if(R[i].key<R[i-1].key)//注意[0,i-1]都是有序的。如果待插入元素比arr[i-1]还大则无需再与[i-1]前面的元素进行比较了,反之则进入if语句
        {
            tmp = R[i];
            j = i-1;
            do
            {
                R[j+1] = R[j];      //将关键字大于R[i].key的记录后移
                j--;
            } while(j>=0 && R[j].key>tmp.key)
            R[j+1] = tmp;       //在j+1处插入R[i]
        }

    }
}
//平均O(n^2)
//二分插入排序
void BinInsertSort(RecType R[], int n)
{
    int i,j,low,high,mid;
    RecType tmp;
    for(i=1;i<n;i++)
    {
        if(R[i].key<R[i-1].key)
        {
            tmp = R[i];
            low = 0; high = i-1;
            while(low<=high)
            {
                mid = (low + high)/2;
                if(tmp.key<R[mid].key)
                    high = mid - 1;
                else
                    low = mid + 1;
            }
            for(j=i-1;j>=high+1;j--)
                R[j+1] = R[j];
            R[high+1] = tmp;
        }
    }
}

//希尔排序算法
void ShellSort(RecType R[], int n)
{
    int i,j,d;
    RecType tmp;
    d = n/2;    //增量置初值
    while(d>0)
    {
        for(i=d;i<n;i++)
        {
            tmp = R[i];
            j = i-d;
            while(j>=0 && tmp.key < R[j].key)
            {
                R[j+d] = R[j];
                j = j-d;
            }
            R[j+d] = tmp;
        }
        d = d/2; 
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值