指针问题 —— 排序问题

Description

输入10个整数,将他们从小到大排序后输出,并给出每个元素在原来序列中的位置

//将程序需要的代码补全,只提交begin到end部分的代码

#include <stdio.h>
#define N 10
int main()
{
    int a[N],b[N],cnt=1,i,j,tmp;
    int *p,*p1;
    for(p = a, p1=b ;p < a+N;p++){
        scanf("%d",p);
        *(p1++) = cnt++;
    }
    for(i = 0;i < N ;i++)
        for(j = i+1 ;j < N ;j++){
            if(*(a+i) > *(a+j)){
                tmp = *(a+i);
                 /********begin*********/
        //Add Code There
                /*********end********/
                *(b+j) = tmp;
            }
        }
    for(p=a;p<a+9;p++)
       printf("%d ",*p);
    printf("%d\n",*p);
    for(p=b;p<b+9;p++)
       printf("%d ",*p);
    printf("%d\n",*p);
    return 0;
}

Input

输入数据有一行,包含10个整数,用空格分开。

Output

输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。

Sample Input

1 2 3 5 4 6 8 9 10 7

Sample Output

1 2 3 4 5 6 7 8 9 10
1 2 3 5 4 6 10 7 8 9

HINT


#include <stdio.h>
#define N 10
int main()
{
    int a[N],b[N],cnt=1,i,j,tmp;
    int *p,*p1;
    for(p = a, p1=b ;p < a+N;p++){
        scanf("%d",p);
        *(p1++) = cnt++;//*p1,b[]里面存放位置信息
    }
    for(i = 0;i < N ;i++)
        for(j = i+1 ;j < N ;j++){
            if(*(a+i) > *(a+j)){
                /*交换数字位置*/
                tmp = *(a+i);
                *(a+i)=*(a+j);
                *(a+j)=tmp;
                /*交换位置信息*/
                 tmp = *(b+i);
                *(b+i)=*(b+j);

                *(b+j) = tmp;
            }
        }
    for(p=a;p<a+9;p++)
       printf("%d ",*p);
    printf("%d\n",*p);
    for(p=b;p<b+9;p++)
       printf("%d ",*p);
    printf("%d\n",*p);
    return 0;
}


猜你喜欢

转载自blog.csdn.net/xjp_xujiping/article/details/79595962