有序插入(C语言)

题目:

有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中。

假设数组长度为10,数组中前9个数(这9个数要求从键盘上输入,输入时要满足自小到大的输入顺序)已经按从小到大进行排序。

然后再从键盘上输入一个整数,将此整数插入到前有序的9个数中,使得最终的10个数依然是从小到大有序的。

样例输入:

1 11 21 31 41 51 61 71 81
45

样例输出:

1
11
21
31
41
45
51
61
71
81

我原先的代码:

#include<stdio.h>
int main()
{
    int a[10];
    int n;
    for(int m=0;m<9;m++){
        scanf("%d",&a[m]);
    }
    scanf("%d",&n);
    if(n>a[8])
    {
        a[9]=n;
    }
    else{
            for(int i=0;i<9;i++){
                if(n>a[i]){
                    for(int j=9;j>i+1;j--){
                        a[j]=a[j-1];
                    }
                    a[i+1]=n;
                    break;
                }
            }
    }
    for(int x=0;x<10;x++)
    {
        printf("%d\n",a[x]);
    }
    return 0;
}

运行结果:

1
45
11
21
31
41
51
61
71
81

答案错误,可是我知道循环肯定错了,竟没想出为什么,因为45比41大呀,然后问了我的好朋友 深蓝。

我的好朋友 深蓝 看了之后,代码改成了下面这样:

#include<stdio.h>
int main()
{
    int a[10];
    int n;
    for(int m=0;m<9;m++){
        scanf("%d",&a[m]);
    }
    scanf("%d",&n);
    if(n>a[8])
    {
        a[9]=n;
    }
    else{
            for(int i=0;i<9;i++){
                if(n>=a[i]&&n<a[i+1]){
                    for(int j=9;j>i+1;j--){
                        a[j]=a[j-1];
                    }
                    a[i+1]=n;
                    break;
                }
            }
    }
    for(int x=0;x<10;x++)
    {
        printf("%d\n",a[x]);
    }
    return 0;
}

运行结果:

1
11
21
31
41
45
51
61
71
81

解这题时我曾:

没有考虑到45不仅比41大,还比1,11,21,31大,要使45插入到正确的位置,应该加条件,即比51小。

猜你喜欢

转载自blog.csdn.net/llllll_____/article/details/81208215