C实例——插入排序(简单插入)

算法描述:内排序的一种,分为简单插入排序和SHELL排序,本例为第一种平云复杂度n^2。适用于待排数较少的情况。
分析:想想平时打扑克,每当拿起一张新牌,要比较手上牌的顺序选择一个较为合适的位置插入,本算法就跟那情况类似。选定待排序的第二个数开始和左边比较插入,如果比左边的小则交换(降序排列),依次比较到第一个数。这样一次迭代完成整个排序序列。
代码:

#include <stdio.h>

/*
    算法伪代码,摘至算法导论(插入排序):
    INSERTION-SORT(A)
        for j = 2 to A.length
            key = A[j]
            i = j - 1;
            while i > 0 and A[i] > key
                A[i + 1] = A[i];
                i = i - 1;
            A[i + 1] = key;
 */
void Insort(int s[], int len)
{
    int i,j,key= 0,index;
    for (i = 1; i < len; i ++)
    {
        key = s[i];
        j = i - 1;
        while (j >= 0 && s[j] > key)    //迭代条件:当前待排的数Si与之前S0~Si-1进行逐一比较
        {
            s[j + 1] = s[j];            //如果满足带插入位置的数比待排数大,则交换俩者位置
            j = j - 1;                  //每次向前推进一个数
        }
        s[j + 1] = key;                 //还原之前待排的关键字
        printf("第%d趟排序结果: ",i);
        for (index = 0; index < 10; index ++)
            printf("%d  ",s[index]);
        printf("\n");
    }
}

int main ()
{
    int a[10] = {25,12,36,45,2,9,29,25,1,0};
    int i;
    printf("待排序列: ");
    for (i = 0; i < 10; i ++)
        printf("%d  ",a[i]);
    printf("\n");
    Insort(a, 10);
    printf("序列结果: ");
    for (i = 0; i < 10; i ++)
        printf("%d  ",a[i]);
    printf("\n");
    return 0;
}

运行结果:
这里写图片描述

shell排序:http://blog.csdn.net/huazhen1234/article/details/53897710
关于测试数据生成我写了个小代码:http://blog.csdn.net/huazhen1234/article/details/53896153

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值