2016-05-30 10 views
0

this bookletのスクリーンショットに見られるように、このコードがintの配列の中央値をどのように見つけ出すかを頭に入れて試してみてください。私は自分のコードに見られるように、C++を使ってコードブロックのコードを複製しようとしています。このBrute Force Median Searchアルゴリズムはどのように実装しますか?

使用する基本的な操作は何ですか?私のコードを動作させるためには、何を変更する必要がありますか? CODED ###################### FIXED

#include <iostream> 
#include <algorithm> 
using namespace std; 

int main() 
{ 
int A[] = {2,3,4,7,8,9,10,12,15}; 
int n = (sizeof(A)/sizeof(A[0])); 
int k = (n/2); 

for(int i=0; n-1; i++) 
{ 
    int numsmaller = 0; 
    int numequal = 0; 
    for(int j=1; n-1; j++) 
    { 
     if(A[j]<A[i]) 
     { 
      numsmaller = numsmaller + 1; 
     } 
     else if(A[j]=A[i]) 
     { 
      numequal = numequal + 1; 
     } 
    } 
    if(((numsmaller < k)&&(k<=(numsmaller + numequal)))) 
    { 
     k = A[i]; 
     cout << k; 
    } 
} 
return 0; 
} 
############。
#include <iostream> 
#include <algorithm> 
using namespace std; 

int main() 
{ 
int A[] = {2,3,4,7,8,9,10,12,15}; 
int n = (sizeof(A)/sizeof(A[0])); 
int k = (n/2); 

for(int i=0;i <= (n-1); i++) 
{ 
int numsmaller = 0; 
int numequal = 0; 
for(int j=1;j <= (n-1); j++) 
{ 
    if(A[j]<A[i]) 
    { 
     numsmaller = numsmaller + 1; 
    } 
    else if(A[j]==A[i]) 
    { 
     numequal = numequal + 1; 
    } 
} 
if(((numsmaller < k)&&(k<=(numsmaller + numequal)))) 
{ 
    k = A[i]; 
    cout << k; 
    return 0; 
} 
} 
return 0; 
} 
+0

あなたの 'for'ループは正しくありません(ヒント:' n-1'部分)。 –

+0

forループは、小冊子に見られるようにアルゴリズムに従います。「このブックレットリンク」をクリックしてください。 – Turtle

+1

正しい論理が正しくない(つまり、ポストされたコードの場合、 'n-1'は常に真です)。 –

答えて

0

else if(A[j]=A[i])はあなたがコンパイラの警告レベルを増やすことをお勧めしますelse if (A[j]==A[i])

でなければなりません。通常-Wall

また、cout << kを実行した時点で、戻ったり終了したりする必要があります。プログラムが完了しました。

+0

ありがとうございました..あなたが述べたように、問題はifステートメントにありました。それは、両方のループの2番目の条件をj <=(n-1)とi <=(n-1)に変更することで修正されたエラーでポップアップを開始しました – Turtle

2

しかし、このアルゴリズムは非常に効率が悪いです。なぜそれを使って配列を検索するのですか?

quickselectアルゴリズムを見てみたいです。それははるかに速く動作します。しかし、あなたが実際に納期の前に譲渡をした場合、あなたはそれを知っているでしょう。

+1

今夜の予定です – Hayden

関連する問題