fork download
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4. int N[10], P[10];
  5. int Top;
  6. int num, i, prv, cur;
  7.  
  8. Top = -1;
  9.  
  10. /* 配列初期化 */
  11. for (i = 0; i < 10; i++) {
  12. N[i] = -1;
  13. P[i] = -1;
  14. }
  15.  
  16. i = 0;
  17.  
  18. printf("数値を入力 (-1で終了): ");
  19. scanf("%d", &num);
  20.  
  21. while (num != -1 && i < 10) {
  22.  
  23. N[i] = num;
  24.  
  25. prv = -1;
  26. cur = Top;
  27.  
  28. /* 大きい順になる位置を探す */
  29. while (cur != -1 && (N[i] > N[cur])) {
  30. prv = cur;
  31. cur = P[cur];
  32. }
  33.  
  34. P[i] = cur;
  35.  
  36. if (prv != -1) {
  37. P[prv] = i;
  38. } else {
  39. Top = i;
  40. }
  41.  
  42. i++;
  43.  
  44. printf("数値を入力 (-1で終了): ");
  45. scanf("%d", &num);
  46. }
  47.  
  48. /* 表示 */
  49. cur = Top;
  50.  
  51. printf("並び替え結果:\n");
  52.  
  53. while (cur != -1) {
  54. printf("%d\n", N[cur]);
  55. cur = P[cur];
  56. }
  57.  
  58. return 0;
  59. }
Success #stdin #stdout 0.01s 5316KB
stdin
32 64 58 79 15 40
stdout
数値を入力 (-1で終了): 数値を入力 (-1で終了): 数値を入力 (-1で終了): 数値を入力 (-1で終了): 数値を入力 (-1で終了): 数値を入力 (-1で終了): 数値を入力 (-1で終了): 数値を入力 (-1で終了): 数値を入力 (-1で終了): 数値を入力 (-1で終了): 数値を入力 (-1で終了): 並び替え結果:
15
32
40
40
40
40
40
58
64
79