質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

7998閲覧

VB 数値に順位をつけるプログラム

_LAGRANGE_

総合スコア44

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/04/07 05:34

以下のように配列matrix(5)が存在し、matrix(0)からmatrix(5)までなんらかの値が入っているときに、それらに順位をつけるプログラミングをしています。

ループの前後は省略させていただきます。

'選んだ要素がほかの要素に抜かされる回数をカウントする
For i As Integer = 0 To 5
rank(i) = 1
For k As Integer = 0 To 5
If matrix(i) < matrix(k) Then
rank(i) = rank(i) + 1
End If
Next
Next

これでrank(i)には順位が1から6まで入るのですが、これだと
・同じ要素番号を比較してしまっている
・matrix(0)に対しmatrix(0)からmatrix(5)までを比較したら次のループからはFor i As Integer = 1 To 5、・・・、でいい
ということからこれらを修正し、コードは長くなってもループの周回数は少なくなるようにしたいです。

色々試したのですがたぶんIf文の位置が間違っていたりでうまくいきません。コードじゃなくて日本語でもいいのでどの位置にどういうことを書けば周回数を減らせるか教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

解決済みですので内容については言及しません。

プログラムには、計算量(オーダ(O))という考え方があります。
プログラムの計算量を求める方法

ぜひ心の片隅に。

投稿2016/04/07 10:00

wakuwaku

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

・同じ要素番号を比較してしまっている

処理としては過剰にカウントされるわけではないので問題ないのでは。
仮にif文を次のようにしたとしても処理コストは余計増えるような気がします。

vbnet

1If matrix(i) < matrix(k) And i <> k Then

matrix(0)に対しmatrix(0)からmatrix(5)までを比較したら次のループからはFor i As Integer = 1 To 5、・・・、でいい

先頭からループをしないと正しくカウントされないのではと思います。

とりあえずコードとしては現状のままで問題ないと思いますが、ループの回数を減らしたいとのことなので、無理やり別のコードを考えてみました。

vbnet

1Dim matrix_work() As Integer 2matrix_work = matrix.Clone() 3Array.Sort( matrix_work ) 4Array.Reverse( matrix_work ) 5for i As Integer = 0 to 5 6 rank(i) = Array.IndexOf( matrix_work, matrix(i) ) + 1 7next 8

果たしてこれが良いコードかどうかはご自身で判断してください。

投稿2016/04/07 07:59

編集2016/04/07 08:07
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問