c++ - 想要将一组乱序的数排列,在插入一组数,使其变为升序数列。

查看:105
本文介绍了c++ - 想要将一组乱序的数排列,在插入一组数,使其变为升序数列。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

现在每次输出都会少掉最大项,还会多出来一些0,请问如何解决?

# include<cstdio>
# include<cstdlib>

long long int a[1000];
long long int c[1000];

void sort(long long int as[],long long int left,long long int right)
{  
    if(left<right)  
    {  
    int i = left;  
    int j = right;  
    int x = as[i];  
  
    while(i<j)  
    {  
        while(i<j&&as[j]>x)  
            j--;  
        if(i<j){  
            as[i] = as[j];  
            i++;  
        }  
        while(i<j&&as[i]<x)  
            i++;  
        if(i<j){  
         as[j] = as[i];  
         j--;  
        }  
    }  
    as[i] = x;  
    sort(as,left, i-1);  
    sort(as,i+1, right);  
    }  
}  

void addsort(long long int num)
{
    printf("\aPlease input the number of the integers you want to add to the origin array:\n");
    long long int addnum,i,j,k;
    scanf("%lld",&addnum);
    long long int add[10000];
    printf("\aPlease input the integers you want to add one by one:\n");
    for (i=1;i<=addnum;i++)
    {
        scanf("%lld",&add[i]);
    }
    if (addnum > 1)
    {
        sort(add,1,addnum);
    }
    
    long long int addposition = 1;
    long long int aposition = 1;
    long long int totalnum;
    totalnum = num + addnum;
    
    printf("The final array is:\n");
    
    for (i=1;i<=totalnum-5;i++)
    {
        if (a[aposition] > add[addposition])
        {
            printf("%lld ",add[addposition]);
            addposition++;
        }
        if (a[aposition] == add[addposition])
        {
            printf("%lld %lld ",add[addposition],add[addposition]);
            i++;
            aposition++;
            addposition++;
        }
        if (a[aposition] < add[addposition])
        {
            printf("%lld ",a[aposition]);
            aposition++; 
        } 
    }
    printf("\n"); 
    return;
} 

int main()
{
    long long int i,j,num;
    printf("\aPlease input the number of the integers in the origin arrray:\n");
    scanf("%lld",&num);
    printf("\aPlease input the integers in the origin array one by one:\n");
    for (i=1;i<=num;i++)
    {
        scanf("%lld",&a[i]);
    }
    sort(a,1,num);
    addsort(num);
    system("pause");
    return 0;
 }

解决方案

addsort中第二个for改成下面,逻辑错态度,自己对比代码吧

for (i=1;i<=totalnum;i++)
{
    if (aposition > num)
    {
        printf("%lld ",add[addposition]);
        addposition++;
    } else if (addposition > addnum)
    {
        printf("%lld ",a[aposition]);
        aposition++;
    } else if (a[aposition] > add[addposition])
    {
        printf("%lld ",add[addposition]);
        addposition++;

    } else if (a[aposition] == add[addposition])
    {
        printf("%lld %lld ",a[aposition],add[addposition]);
        i++;
        aposition++;
        addposition++;

    } else if (a[aposition] < add[addposition])
    {
        printf("%lld ",a[aposition]);
        aposition++; 
    }
}

这篇关于c++ - 想要将一组乱序的数排列,在插入一组数,使其变为升序数列。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆