• 締切済み

C#でバブルソート

テキストボックスに任意の整数を複数個入力し、ボタンを押すことで入力した数字を別のテキストボックスに昇順・降順表示するプログラムを作りたいと思っています。 例えば 入力用テキストボックスに1、10、5をキーボードで入力 ↓ 作っておいた「昇順に並び替え」のボタンをクリック ↓ 出力用テキストボックスに1、5、10と表示される (「降順に並び替え」のボタンをクリックした場合は、10、5、1と表示) といった感じです。 バブルソートを使って作りたいのですが、超初心者のため、数字同士の比較?や、テキストボックスへの出力の仕方が全く分かりません。 分かりにくい文章のみの状況説明になってしまいましたが、ご指導よろしくお願いします。 マイクロソフトのビジュアルのC#プロジェクトです。

みんなの回答

回答No.1

namespace Q4179919A { class Q4179919A:System.Windows.Forms.Form { private System.Windows.Forms.TextBox input; private System.Windows.Forms.TextBox output; private System.Windows.Forms.Button run; public Q4179919A(){ this.Width = 800; this.Height = 600; input = new System.Windows.Forms.TextBox(); input.Width = 100; input.Top = 50; input.Left = 0; output = new System.Windows.Forms.TextBox(); output.Width = 100; output.Top = 150; output.Left = 0; run = new System.Windows.Forms.Button(); run.Text = "run"; run.Width = 100; run.Top = 200; run.Left = 0; run.Click += new System.EventHandler(Sort); this.Controls.AddRange(new System.Windows.Forms.Control[]{input,output,run}); } public static void Main(string[] args) { Q4179919A form1 = new Q4179919A(); form1.ShowDialog(); } public void Sort(object sender, System.EventArgs e){ System.Collections.Generic.List<int> l = new System.Collections.Generic.List<int>(); string[] arr = input.Text.Split(new char[]{' '}); foreach(string item in arr){ try{ l.Add(int.Parse(item)); }catch(System.FormatException err){ System.Windows.Forms.Application.Exit(); } } for(int i = 0;i < l.Count;i++){ for(int j = 1;j < l.Count - i;j++){ if (l[ j ] < l[ j - 1 ]){ var temp = l[j]; l[j] = l[j-1]; l[j-1] = temp; } } } for(int i = 0;i < l.Count - 1;i++){ output.Text += l[i].ToString() + " "; } output.Text += l[l.Count - 1].ToString(); } } } /* 1.テキストボックス狭いけどまあいい。 2.コードそのものはWikipediaのソースコードをC#に単純に移植しただけ 3.正直なところ,自分でバブルソート実装するくらいならl.Sort()でも実行した方が遥かにマシであると思う。 4.ソートを行うためのテキストボックスへの入力内容は,各半角整数をただ1つの半角スペースで繋いだものであり,最後に空白や改行はつけない。 出力自体もこのフォーマットに従う。当然ながら半角二つとか改行とかタブ区切りにしたらソートされないというか,面倒くさかったのでエラーメッセージログ等吐かずにいきなりアプリケーションが終了するようにしている。妙な制約がないものであれば,もっと真面目に組むつもりなのだが。 */

noname#65464
質問者

お礼

お礼が遅くなってすみません。 結果ですが、期待した結果は得られませんでした。 >正直なところ,自分でバブルソート実装するくらいならl.Sort()でも実行した方が遥かにマシであると思う。 学校の課題がバブルソートだったんです。 でなきゃこんな素人が人に尋ねてまでよく分からない方法でプログラミングなんてするはずないじゃないですか。 >もっと真面目に組むつもりなのだが こういうことは思っててもいうべきじゃないと思いますよ。 せっかく親切で回答してもらってもありがたみが半減します。まあ動かなかったのでありがたみもクソも無いんですがね。

関連するQ&A