直接插入排序

算法思想:

以前面元素有序为基准,当前元素与已经排好的序列进行比较,找到对应该元素的位置将以排好的元素后移,插入当前元素

eg:

6
6 4 7 3 1 5
第一趟:6为已排好的序列,   4插入结果:  4  6  7  3  1  5

第二趟:4,6为已排好的序列,7插入结果:  4  6  7  3  1  5

第三趟:4,6,7为已排好的序列,3插入结果:  3  4  6  7  1  5

第四趟:3,4,6,7为已排好的序列,1插入结果: 1  3  4  6  7  5

第五趟:1,3,4,6,7为已排好的序列,,5插入结果:  1  3  4  5  6  7

#include<stdio.h>

void insertsort(int a[],int n)
{
    for(int i=1; i<n; i++)
    {
        temp=a[i];
        j=i-1;
        while(j>=0 && a[j]>temp)
        {
            a[j+1]=a[j];///后移
            j--;
        }
        a[j+1]=temp;
    }
}
int main()
{
    int a[100],n;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
        scanf("%d",&a[i]);
    insertsort(a,n);
    for(int i=0; i<n; i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}

插入排序例题


有两个递增数组,把第二个数组的数逐个插入到第一个数组中
使第一个数字组中所有数均不大于第二个数组
input:
4 12 28
1 7 9 29 45
output:
1 4 7
9 12 28 29 45


算法思想:
设第一个数组为a,第二个数组为b
判断a的最后一个元素是大于b的第一个元素(因为a,b递增)
不大于则交换并排序,因为有序只需进行依次直接插入排序即可
直到a最后一个元素大于b的第一个元素为止
 
 

#include<stdio.h>

void integrate(int a[],int b[],int n,int m)
{
    int i,j;
    while(a[n-1]>b[0])
    {
        int temp=b[0];
        j=n-1;
        b[0]=a[n-1];
        a[n-1]=temp;
        while(a[j-1]>temp && j>=0)
        {
            a[j]=a[j-1];
            j--;
        }
        a[j+1]=temp;
        j=0;
        temp=b[0];
        while(b[j+1]<temp && j<m)
        {
            b[j]=b[j+1];
            j++;
        }
        b[j]=temp;
    }
}
int main()
{
    int a[100],b[100],n,m;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    for(int i=0; i<m; i++)
        scanf("%d",&b[i]);
    integrate(a,b,n,m);
    for(int i=0; i<n; i++)
        printf("%d ",a[i]);
          printf("\n");
    for(int i=0; i<m; i++)
        printf("%d ",b[i]);
    printf("\n");
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值