現在visualstudio2010という環境の下でプログラムを組んでいます。
現在、入力された数値を配列に保存して、その配列を昇順、降順に並べ替える処理を考えています。
例えば入力された数値が配列の小さい方から, 2 9 3 7 4 だとすると、
出力は 2 3 4 7 9 となります。
今考えているソートの手順としては
29374
23974
23794
23749
23479
という風な足取りをたどって、ソートしたいと考えています。
理想としては、最大数から順番に決まっていく方式です(下に書き記す)
29374
23749
23479
という風に記述することができれば上に書いた方式よりも処理速度が向上すると考えています。
上記処理、理想でも、今考えているソートでもいいので、書き記すためのヒントをいただけないでしょうか
現在考えているコードはこちらになります。
for (int k = 0; k < 5; k++)
{
if (a[k]>a[k + 1])
{
hozon = a[k];
a[k] = a[k + 1];
a[k + 1] = hozon;
}
}
まだ、あまり練れていないのでかなりのミスを犯していると思います。
よろしくおねがいします
昇順ソートと降順ソート
Re: 昇順ソートと降順ソート
「今考えているソート」「理想」ともにバブルソートでしょうか?RaiseBB さんが書きました:今考えているソートの手順としては
29374
23974
23794
23749
23479
という風な足取りをたどって、ソートしたいと考えています。
理想としては、最大数から順番に決まっていく方式です(下に書き記す)
29374
23749
23479
という風に記述することができれば上に書いた方式よりも処理速度が向上すると考えています。
バブルソートなのでどちらもO(N^2)ですが、「理想」は出力の量が少ない分処理速度が向上しそうですね。
二重ループを用います。RaiseBB さんが書きました:上記処理、理想でも、今考えているソートでもいいので、書き記すためのヒントをいただけないでしょうか
外側のループは単純に(配列の要素数)回繰り返します。
内側のループは簡単のため(配列の要素数-1)回回し、配列の「小さい方」から順にチェックし、次の要素の方が大きければ入れ替えます。
「今考えているソート」では入れ替えたら配列の内容を出力し、
「理想」では内側のループが終了し、かつ今回の内側のループで入れ替えが起きていたら配列の内容を出力すればいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 昇順ソートと降順ソート
みけCATさん素早い回答をありがとうございます。
考えているソート方法はバブルソートで間違いないです。
二重ループを利用したコードを書いてみます!
考えているソート方法はバブルソートで間違いないです。
二重ループを利用したコードを書いてみます!
Re: 昇順ソートと降順ソート
無事に出力することが出来ました。
降順は昇順の手順を少しいじればできそうなので、自力で取り組もうと思います。
素早い回答本当にありがとうございました!
降順は昇順の手順を少しいじればできそうなので、自力で取り組もうと思います。
素早い回答本当にありがとうございました!