fork download
  1. #include <stdio.h>
  2.  
  3. void dataPrint(int *a, int n)
  4. {
  5. int i;
  6.  
  7. for ( i = 0; i < 7; i++) {
  8. printf("%3d", a[i]);
  9. }
  10. printf("\n");
  11. }
  12.  
  13. int shuttle_sort(int num[], int n)
  14. {
  15. int i, j, k, tmp;
  16.  
  17. for (i = 1; i < n; i++) { /* 配列の先頭の2つ目から */
  18. tmp = num[i]; /* スキャンしたデータを別の変数に保管し、「挿入するデータ」と定義する */
  19. k = i; /* 挿入位置を変数kに保存 */
  20. for (j = i; j > 0; j--) {
  21. if (num[j - 1] > tmp) { /* 「現在着目しているデータ」> 「挿入するデータ」の場合 */
  22. num[j] = num[j - 1];
  23. k = j - 1; /* データの代入が有った場合だけ、挿入位置を更新 */
  24. }
  25. }
  26. num[k] = tmp; /* データを挿入 */
  27. printf("%d 回目:", i);
  28. dataPrint(num, n);
  29. }
  30. return 0;
  31. }
  32.  
  33. int main()
  34. {
  35. int i, data[7];
  36.  
  37. printf("7人の点数を入力して下さい\n");
  38. for ( i = 0; i < 7; i++) {
  39. scanf("%d", &data[i]);
  40. }
  41. printf("整列前:");
  42. dataPrint(data, 7);
  43. shuttle_sort(data, 7);
  44. printf("整列後:");
  45. dataPrint(data, 7);
  46.  
  47. return 0;
  48. }
  49.  
Success #stdin #stdout 0.01s 1680KB
stdin
62
45
15
73
32
90
84
stdout
7人の点数を入力して下さい
整列前: 62 45 15 73 32 90 84
1 回目: 45 62 15 73 32 90 84
2 回目: 15 45 62 73 32 90 84
3 回目: 15 45 62 73 32 90 84
4 回目: 15 32 45 62 73 90 84
5 回目: 15 32 45 62 73 90 84
6 回目: 15 32 45 62 73 84 90
整列後: 15 32 45 62 73 84 90