插入法排序

插入法排序的原理。

这里记录下代码效率,一次循环为 cn ,嵌套一个循坏为 cn2 ,插入法有一个嵌套的循坏,所以效率为 cn2 这个档次的。

#include<stdio.h>
main()
{
    int a[6] = { 5,2,6,3,7,4 }, i = 0, j = 0,z;
    for (i = 1; i < 6; i++)
    {
        z = a[i];
        for (j = i - 1; j >= 0 && a[j] > z; j--)
        {
            a[j + 1] = a[j];
        }
        a[j+1] = z;

    }
    for (i = 0; i < 6; i++)
    {
        printf("%d,", a[i]);
    }

    getchar();
}


练习2.1-1:

1、第一个数不需要排序,因此我们从第二个数开始插入。当j=2,将a[j]=41赋值给key(这一步很关键,相当于把将要插入的数放到第三方储存,以后任何涉及a[i]或a[j]的的计算均不会影响正在进行插入的这个数,否则进行 a[i+1]=a[i] 这个移位步骤时由于 i+1=j 会将上一位a[i=j-1]的值赋给a[j],导致数据被改变)。引入变量i,令 i=j1 ,此时a[i]=a[j-1],正好是要插入a[j]的前一位。用a[i]和key比较(注意不是和a[j]比较),假如key大于或等于a[i]则直接将key放在a[i]后一位就可以了(a[i+1]=key)。如果小于,就要和a[i]的前一位a[i-1]比较,如果大于就放a[i-1]后面,以此类推。
练习2.1-2:

伪代码
插入法排序数组A 
 for j=2 to length(A)
    do key=a[j]
     //*将a[j]插入a[1..j-1]
    i=j-1
    while(i>0 and a[i]>key)
        do a[i+1]=a[i]
        i=i-1
    a[i+1]=key
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值