降順で並べ替えるコードを書きたいのですが、正しく並び替えられません。
特に8,7,6等の大きいものから入力した際にも__deascend__内のif文が実行されてしまい、正しい順番で表示されません。
どのように変更をすれば良いでしょうか
また、バブルソートについても調べたのですがfor文を使った例しか出てこないです。
今回のような場合もfor文を利用して並び替えるのが正しいですか?
c
1#include<stdio.h> 2 3void deascend(int *x, int *y, int *z); 4void swap(int *a, int *b); 5 6int main(void) { 7 int n1,n2,n3; 8 9 printf("n1:"); scanf("%d", &n1); 10 printf("n2:"); scanf("%d", &n2); 11 printf("n3:"); scanf("%d", &n3); 12 13 deascend(&n1, &n2, &n3); 14 15 printf("%d, %d, %d\n", n1, n2, n3); 16 17 return 0; 18} 19 20void deascend(int *x, int *y, int *z) { 21 22 if (*x > *y) swap(x,y);printf("[1]%d,%d\n",*x,*y); 23 if (*y > *z) swap(y,z);printf("[2]%d,%d\n",*y,*z); 24 if (*z > *x) swap(z,x);printf("[3]%d,%d\n",*z,*x); 25 26 return; 27} 28 29void swap(int *a, int *b) { 30 int i; 31 i = *a; 32 *a = *b; 33 *b = i; 34 return; 35}
terminal
1n1:1 2n2:2 3n3:3 4[1,2,3] 5[1]2,1 6[2]3,1 7[3]1,2 82, 3, 1
関数deascendの中にはifが3つ書かれていますが,こう書いたからには
・それぞれを何をするための処理として書いたのか?
・どうしてこの順番で書いたのか?
といった考えがあったハズ.
まずはそういうところを自身で整理してみてはどうでしょう.
「バブルソート」というソート法によるコードをお探しになれば、何時何処と何処を比較・交換すればソート出来るかの参考になると思います。
> バブルソートについても調べたのですがfor文を使った例しか
注目して頂きたいのは for 文か if 文かでは無く、「いつ」「どことどこを」比較・交換しているか、です。
正直何に躓いているのかがわからない.
とりあえず3要素しかないのだから,かっこつけて「バブルソートがどうの」とか言わずとも,自明な手順をそのままコード化すればよいだけではないのか?
例えば「数値が書かれたカードが3枚配られたときに,それを自分が降順に並べかえるとしたらどうやるか?」とか何とか考えてみればよい.
トランプで自分に配られた手札を見やすいように並び替えたりとかは普通にやるっしょ.
普通にやるってことは手順は自明ってことだ.
(現実世界でこれができない,というのならば自明とは言えなくなるが)
回答1件
あなたの回答
tips
プレビュー