当前位置:   article > 正文

7-224 sdut-C语言实验-排序问题_输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。

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

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

输入格式:

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

输出格式:

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

输入样例:

1 2 3 5 4 6 8 9 10 7

输出样例:

在这里给出相应的输出。例如:

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

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

思路

本题思路对输入的 10 个数进行排序(本题使用冒泡排序,其他排序方法也可以),输出排序后的数组和原始位置。

  1. 使用一个大小为 11 的整型数组 a 存储输入的 10 个整数,并使用另一个相同大小的整型数组 b 记录每个数在输入中的序号(从 1 开始),即 b[i] = i。
  2. 进行冒泡排序,比较相邻两个数的大小,如果前一个比后一个大,则交换它们(包括同时交换它们在数据输入时记录下来的位置信息)。
  3. 最后按顺序输出经过排序的数组 a 和 b(此时 b 数组是按照元素值递增的方式排列的)即可。

代码

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[11], b[11], i, j, temp;
  5. // 输入数据到数组 a 中,并记录位置信息到数组 b 中
  6. for (i = 1; i <= 10; i++) {
  7. scanf("%d", &a[i]);
  8. b[i] = i;
  9. }
  10. // 冒泡排序算法
  11. for (i = 1; i <= 9; i++) { // 注意循环范围,内部循环从 j=1 开始
  12. for (j = 1; j <= 10 - i; j++) {
  13. if (a[j] > a[j+1]) { // 在需要交换时同时交换 b 数组中的值,此为同步交换
  14. temp = a[j];
  15. a[j] = a[j+1];
  16. a[j+1] = temp;
  17. temp = b[j];
  18. b[j] = b[j+1];
  19. b[j+1] = temp;
  20. }
  21. }
  22. }
  23. // 输出数组 a
  24. for (i = 1; i <= 10; i++) {
  25. printf("%d", a[i]);
  26. if (i == 10) printf("\n"); // 最后一个数据后需要换行
  27. else printf(" ");
  28. }
  29. // 输出数组 b(注意输出的时候需要将下标移动回去,因为题目要求从 1 开始编号)
  30. for (i = 1; i <= 10; i++) {
  31. printf("%d", b[i]);
  32. if (i == 10) printf("\n"); // 最后一个数据后需要换行
  33. else printf(" ");
  34. }
  35. return 0;
  36. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号