尝试围绕这段代码如何找到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;
}
############ FIXED CODED ######################。
#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 :(得分:2)
这个算法效率很低。你为什么要用它来搜索数组?
您可能需要查看quickselect算法。它工作得更快。但是你知道如果你在截止日期之前完成了作业。
答案 1 :(得分:0)
else if(A[j]=A[i])
应为else if (A[j]==A[i])
您可能希望增加编译器的警告级别。通常是-Wall
。
此外,在您执行cout << k
时,您应该返回或退出 - 程序已完成。