直接插入排序

直接插入排序是一种最为简单的排序方法。其基本思想是:在第i次排序中,第i+1个元素与前面的i个元素,进行比较。然后插入到已经有序的数列中的合适的位置。使得插入后的序列任然是保持有秩序的。

例题:编写一个C程序,实现数据序列{{2,5,6,3,7,8,0,9,4,1}的直接插入排序,要求是从小到大,并输出排序后的数列元素。

源程序:

#include <stdio.h>

void insertsort(int a[],int n)
{
    int i,j,tmp;/*tmp是临时变量,用于存储数据*/
    for(i=1;i<n;i++)
    {
        tmp=a[i];/*将k【i】临时保存在变量tmp中*/
        j=i-1;
        while(j>=0 && tmp<a[j])  /*判断条件,实现从小到大的排序*/
            a[j+1]=a[j--];
        a[j+1]=tmp;
    }
}
void main()
{
    int i;
    int    a[10]={2,5,6,3,7,8,0,9,4,1};/*初始化数组*/
    printf("原来的数字的顺序是:");
    for(i=0;i<10;i++)
        printf("%3d",a[i]);/*输出当前的数组*/
    insertsort(a,10);/*插入排序*/
    printf("\n排好的顺序是:\n");
    for(i=0;i<10;i++)
        printf("%3d",a[i]);/*输出排序后的结果*/
    getchar();

}

其运行结是:

这个排序主要是用到一个算法:

void insertsort(int a[],int n)
{
    int i,j,tmp;/*tmp是临时变量,用于存储数据*/
    for(i=1;i<n;i++)
    {
        tmp=a[i];/*将k【i】临时保存在变量tmp中*/
        j=i-1;
        while(j>=0 && tmp<a[j])  /*判断条件,实现从小到大的排序*/
            a[j+1]=a[j--];
        a[j+1]=tmp;
    }
}

这个看起来很简单的几句代码,但是,我是想了好长时间才明白的。关于这个算法的妙处如下图:



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值