C语言实例 直接插入排序

实例要求:

使用直接插入排序法将输入的数字从小到大排序,效果如下图所示:

实现步骤:

直接插入排序就是把一个记录插入到已经排序的有序序列里,使整个序列在插入该记录后仍然有序。直接插入位置的确定方法是将待插入的记录与有序区中的各记录自右向左依次比较其关键词的大小。具体代码如下:

1.main()主函数作为程序的入口函数,负责键入数据、调用系统函数及自定义函数

void main()
{
    int a[11], i;								/*定义数组及变量为基本整型*/
    printf("请输入10个数据:\n");
    for (i = 1; i <= 10; i++)
        scanf("%d", &a[i]);						/*接收从键盘中输入的10个数据到数组a中*/
    printf("原始顺序:\n");
    for (i = 1; i < 11; i++)
        printf("%2d", a[i]);					/*将未排序前的顺序输出*/
    insort(a, 10);								/*调用自定义函数isort()*/
    printf("\n插入数据排序后顺序:\n");
    for (i = 1; i < 11; i++)
        printf("%2d", a[i]);					/*将排序后的数组输出*/
    printf("\n");
}

2.自定义函数insort(),实现直接插入排序

void insort(int s[], int n)						/*自定义函数isort s[]为数组,n为长度*/
{
    int i, j;
    for (i = 2; i <= n; i++)					/*数组下标从2开始,0做监视哨,i=1无可比性*/
    {
        s[0] = s[i];							/*给监视哨赋值*/
        j = i - 1;								/*确定要进行比较的元素的最右边位置*/
        while (s[0] < s[j])
        {
            s[j + 1] = s[j];					/*数据右移*/
            j--;								/*移向左边一个未比较的数*/
        }
        s[j + 1] = s[0];						/*在确定的位置插入s[i]*/
    }
}

注意:

本算法中运用了监视哨,其目的是为了避免数据在后移时丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值