题目描述
输入 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 here
/********** 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;
}
输入
输入数据有一行,包含 10个整数,用空格分开。
1 2 3 5 4 6 8 9 10 7
输出
输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。
1 2 3 4 5 6 7 8 9 10
1 2 3 5 4 6 10 7 8 9
代码如下:
*(a + i)=*(a + j);
*(a+j)=tmp;//交换数值
tmp=*(b+i);
*(b+i)=*(b+j);
完整代码:
#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);
*(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;
}