2016-05-30 82 views
0

試圖圍繞這個代碼如何找到一個int數組的中位數,如從this booklet的屏幕截圖中看到的。我一直在嘗試使用C++複製代碼塊中的代碼,如我的代碼中所見。我將如何實現這個蠻力中值搜索算法?

我需要使用哪些基本操作?我需要更改哪些代碼才能運行?

#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語句中,正如你陳述的那樣。以及需要退出的陳述。它開始彈出一個錯誤,通過改變For循環中的第二個條件將它修改爲j <=(n-1)和i <=(n-1) – Turtle

2

這個算法效率很低。你爲什麼要用它來搜索一個數組?

您可能想看看quickselect算法。它的工作速度非常快。但是,如果您在截止日期之前確實完成了任務,您就會知道。

+1

這是爲今晚的任務 – Hayden