2016-05-30 101 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