在你的代码中,排序部分逻辑看起来是正确的。但是在输出位置时存在一个问题,因为数组下标是从0开始的,所以在记录元素位置时,position[i] = i + 1应该改为position[i] = i。这样才能正确记录元素在原来序列中的位置。
这是修改后的代码:#include <stdio.h>int main() { int i, j, temp, arr[10], position[10]; for (i = 0; i < 10; i++) { scanf("%d", &arr[i]); position[i] = i; } for (i = 0; i < 9; i++) { for (j = 0; j < 10 - i - 1; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; temp = position[j]; position[j] = position[j + 1]; position[j + 1] = temp; } } } for (i = 0; i < 9; i++) { printf("%d ", arr[i]); } printf("%d\n", arr[9]); for (i = 0; i < 9; i++) { printf("%d ", position[i]); } printf("%d", position[9]); return 0;}
现在代码应该能够正确地对输入的10个整数进行排序,并输出排序后的数组以及每个元素在原来序列中的位置。如果有其他问题或疑问,请随时告诉我。 |