排序<2>插入排序

 

1.什么是插入排序

插入排序就是从一个乱序的待排序列中一次拿一个元素,从拿到的第二个元素开始,和现已拿出的元素从后往前(或从前往后)比较,指定比前面(后面)元素大(小),就找到了他的位置,在相应的位置放入拿出的这个元素。依次类推。

2.插入排序的关键点

插入排序可以不需要额外的空间就可以完成,因为当从待排序列中拿出一个元素时,它所在的位置就空了出来,用这个空位就可以用来挪位。举个例子,有待排序列如9 2 1 8,需求是按递增顺序排序。开始第一个元素不用动,从第二个元素开始,把2拿出来,2的位置空闲了,和9进行比较发现比9小,那么就把9交换到空位上,9的位置就空了出来,再就把2放在9的位置,序列现在是这样的:2 9 1 8。现在要拿的元素是1了,从它前一个位置依次往后比较,先和9比较发现比9小,9放到1的位置。再用1和2比较,发现还是比2小,就把2放到现在空出的先前放9的那个位置上,再往前没有元素了,那么这个位置就是1 的位置,序列现在是这样的:1 2 9 8。从刚才的分析中可以看出,插入排序是一个逐渐有序的过程,也就是说直到拿出最后一个元素后才可以完成排序,不存在到中间某个位置就已经有序了排序结束的情况。

3.插入排序应用

typedef int ElmentType;
void InsertionSort(ElmentType *S, int N)
{
    int i,j;
    for(i = 1; i<N;i++)
    {
        ElmentType tmp = S[i];
        for(j = i;j >0 && tmp < S[j-1]; j--)
                S[j] = S[j-1];
        S[j] = tmp;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值