2016-04-12 10 views
0

私はこの質問に対する正解がなぜ4であるかを調べるためにいくつかの問題を抱えています。誰かが理由を簡単に説明するのに十分なほど親切になれますか?ありがとうございました!ここでの質問は次のとおり示すようwhileループの位置を特定するためには、whileループを何回繰り返す必要がありますか?

は、値を配列Aを考える:

4、7、19、25、36、37、50、100、101、205、220、271、306、321

4はa [0]、321は[13]です。検索方法が first = 0、last = 13で呼び出され、キー205が見つかったとします。whileループを検索するには、whileループを何回繰り返す必要がありますか?

+0

注文アイテムの検索アルゴリズムに関して、彼らは何を教えましたか?ここでは、あなたが望む要素が見つかるまで、0から始まり、一度に1つずつインデックスを作成します。もちろん、4以上になります。もっと効率的なアルゴリズムを使った答えを探しています。クラス、またはあなたが見ているテキストブック(バイナリ検索など)。 – lurker

答えて

1

最後のインデックスから移動してください。

あなたは、インデックス12に行く最初の反復は、205

+0

非常に基本的な質問への簡単な答え... :) – 16per9

+1

インデックス13をカウントすると、最初の反復は、インデックス9は5です反復(13,12,11,10,9)であり、第4回ではありません。 – lurker

3

に等しい索引9上にある第四の繰り返し、上の私の推測では、あなたがバイナリ検索を使用する必要があることである指標13、で始まりますここでは、アイテムがソートされます。

m = (l + r)/2 = (0 + 14)/2 = 7 
[m = 7] = 100 is < 205 ==> l = 7 + 1 

m = (l + r)/2 = (8 + 14)/2 = 11 
[m = 11] = 271 is > 205 ==> r = 11 - 1 

m = (l + r)/2 = (8 + 10)/2 = 9 
[m = 9] = 205 is = 205 ==> result = [9] 

= 3回の反復:次に、あなたがこれらの反復を必要とする

left and right indexes: l = 0, r = 14 (= length of array) 

は、あなたがして初期化し、この配列

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 
4, 7, 19, 25, 36, 37, 50, 100, 101, 205, 220, 271, 306, 321 

を考えます!

ただし、アルゴリズムを少し変更すると反復回数が変わる可能性があります。あなたが初期値としてr = N-1の代わりNを取るなら、あなたが得る:

m = (l + r)/2 = (0 + 13)/2 = 6 (integer division) 
[m = 6] = 50 is < 205 ==> l = 6 + 1 

m = (l + r)/2 = (7 + 13)/2 = 10 
[m = 10] = 220 is > 205 ==> r = 10 - 1 

m = (l + r)/2 = (7 + 9)/2 = 8 
[m = 8] = 101 is < 205 ==> l = 8 + 1 

m = (l + r)/2 = (9 + 9)/2 = 9 
[m = 9] = 205 is = 205 ==> result = [9] 

= 4回の反復を!

結果は実装の詳細によって異なります。両方の変形が正しい。適切なループ条件を選択するように注意してください(最初はl < r、2番目のアルゴリズムはl <= rだと思います)

関連する問題