A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
バブル ソート
セレクション ソート
シェル ソート
についてのVBのサンプルが、MicrosoftのHPで公開されています。
このサンプルは1001個のランダムな数字の収められた配列を、各ソートプログラムに渡し、実行経過時間を測定するようになっております。
実証として、シェルソートが一番早いようです。
以下のプログラムをサンプルプログラムの
> MsgBox "イミディエイト ウィンドウで結果をご確認ください"
の下に追加してください。
Dim minNum As Long
Dim maxNum As Long
Dim cntAry As Long
Dim lngAryCenter As Long
Dim lngCenter As Long
'配列要素数を得る
minNum = LBound(vTemp3)
maxNum = UBound(vTemp3)
cntAry = maxNum - minNum + 1
'(1)と(2)のどちらかを使用する
'(1)配列の真中を求める(配列が偶数個の時、二つ存在する真中の小さい数の方の値を求めるとき)
lngAryCenter = (cntAry + 1) \ 2 '小数点切り捨て
'(2)配列の真中を求める(配列が偶数個の時、二つ存在する真中の大きい数を方の値を求めるとき)
lngAryCenter = Int((cntAry + 1) / 2 + 0.9) '小数点切り上げ
'配列要素が1から始まるとは限らないので、そのずれを補正
lngCenter = lngAryCenter + (minNum - 1)
'中央値の表示
MsgBox "中央の値は「" & lngAryCenter & "」番目の[" & vTemp3(lngCenter) & "]です"
これでセンターの値が求められます。
ソートのアルゴリズムは説明できるほど詳しくないので書きませんが、先に述べられているように[ソート][アルゴリズム]で検索をかけたら、あちこちの大学の研究室のHPで詳しく記されています。
かすかな記憶ですが・・・ぼくが大学のとき、バブルソートが一番早いと習ったはずなのですが・・・
違ったのかなぁー
参考URL:http://www.microsoft.com/japan/support/kb/articl …
No.2
- 回答日時:
nこの変数が有り、ソートをして、真ん中の要素を出力すればよいのですが。
3個の要素であれば出来ると言うのは、forを使わない処理ですか?
であればforの使い方を学習しましょう。
中央の要素の求め方は簡単ですよね?
No.1
- 回答日時:
ソート(並べ替え)を行って、配列中の n/2 番目のデータを取得すればいいですよね。
ソートに関しては、アルゴリズムの本を読めば少なくとも数種類の方法が載っているはずですので、好きなものを使えばいいでしょう。
とりあえず、最も理解しやすいと思われる「バブルソート」を使って造ってみました。
Private Sub Command1_Click()
Dim Data(255) As Long
Dim i As Long, j As Long
Dim tmp As Long
'データを乱数で初期化する
Randomize Timer
For i = 0 To 255
Data(i) = Rnd * 1000
Next i
'データを並べ替える
For i = 0 To 254
For j = 0 To 254 - i
If Data(j) > Data(j + 1) Then
tmp = Data(j)
Data(j) = Data(j + 1)
Data(j + 1) = tmp
End If
Next j
Next i
'ちゃんとソートできてるか確認
For i = 0 To 255
Debug.Print Data(i) & " ";
Next i
Debug.Print
'中間値を得る
MsgBox "中間は " & Data(255 / 2) & " です。"
End Sub
こんな感じです。
バブルソートについては、ネットで検索をかけてみると沢山ヒットすると思いますが、例えばコレ↓とか。
http://www.soi.wide.ad.jp/class/97001/slides/04/ …
尚、上のプログラムはかなりヘタレです(^^;
同じバブルソートをするにしても、もっと高速なプログラムはいくらでもあります。
加えて、中間値を求めるのであれば、全部ソートする必要も無いですしね。
興味があれば、市販の「アルゴリズム辞典」などをご覧下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 malloc 関数を使って教えてください。 入出力例1 3 2022/07/21 09:36
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- Ruby プログラミング 3 2023/06/09 14:30
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelですべての組合せ(重複組...
-
Excel VBAで並べ替えをしたい
-
C# DataTableの行をソートしてD...
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
Fortran77で多次元配列を並び替...
-
excel VBA リストビューの行...
-
配列の問題
-
マクロのコードを知りたい。値...
-
小さい順
-
新しい順のリスト取得
-
ヒープソートについて
-
SQL-SELECT文でのソート
-
VC++6.0 MFC ダイアログバーを...
-
ExcelVBAで質問です。離れた二...
-
c言語
-
C言語 配列の長さの上限
-
パイソンの
-
_tcscpy_s(wcscpy_s)の第二引数...
-
mallocについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
ファイル名「1.jpg ~10.jpg~...
-
excel VBA の条件をつけての列...
-
リスト構造のソートで悩んでま...
-
C# DataGridView のヘッダーセ...
-
DataGridViewの複数列を連動し...
-
文字列をソートする方法
-
C# DataTableの行をソートしてD...
-
C言語・要素除去
-
Excelですべての組合せ(重複組...
-
VBA基本構文の作り方 2列の...
-
列のどこをクリックしてもソー...
-
excel VBA リストビューの行...
-
あるディレクトリ内のファイル...
-
コレクションの数値をSortで並...
-
数字文字列のソート方法
-
VBScriptで重複レコードを削除...
-
2次元配列を複数項目でソートし...
-
10個の整数を入力して小さい順...
おすすめ情報