插入排序的应用

一、题目:

插入排序类似于玩扑克时抓牌的过程,玩家每拿到一张牌都要插入到手中已有的牌里,使之从小到大排好序。

现在使用一个排好序的数组模拟插入排序,即输入一数时,要求按原来排序的规律将它插入数组中。

Input
有多组数据,第一行一个正整数t(t<100)表示输入数据组数,接下来有t组输入数据,每组数据占2行,
第一行包含一个整数n和x(n<10000<x<10000),x表示要插入的数。接下来一行包含用空格隔开n个数。 Output 对于每组输入,输出对应排好序的数列,输出到一行,两个数之间用空格隔开,行末不包含空格。 Sample Input 1 4 3 1 2 3 4 Sample Output 1 2 3 3 4

二、代码

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int a[1005];
    int t;
    scanf("%d",&t);
    while(t--){
        int n,x;
        scanf("%d%d",&n,&x);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        a[n]=x; //先将要插入的数放在数列的最后
        for(int i=1;i<n+1;i++)
        {
            int monitor=a[i];
            int j=i-1;
            while(a[j]>monitor && j>=0)
            {
                a[j+1]=a[j];
                j--;
            }
            a[j+1]=monitor;
        }


        for(int i=0;i<n+1;i++)
        {
            printf("%d",a[i]);
            if(i!=n)      //控制格式
                printf(" ");
            else
                printf("\n");
        }
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/mcgrady_ww/p/7622398.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值