一个数组,里面有若干个数,怎么快速找到满足条件的数

一个数组,里面有若干个数,如何快速找到满足条件的数?
如题,假设有个数组,里面有10000个以上的数,可能全是0,也可能有若干个大于0的数;
要求是:
在这个数组中,查找大于0的数,以确定这个数组是否存在大于0的数;
只要有一个数大于0,就能确定这个数组存在大于0的数。

直接用for循环从头至尾遍历数组,是可以完成这个要求所述的功能,但是,效率是个问题。

------解决方案--------------------
利用 多线程 并行查找
------解决方案--------------------
如果你没有办法操作数组的话,那么从头至尾遍历已经算是效率比较高了;如果你可以操作数组的话,假设你的数组是稀疏的,那么初始化数组的时候同时也初始化大于0的下标记录链表,以后更改数组的时候,同时也更改链表,这样你要判断数组是否存在大于0的数的时候,只需要判断链表的长度是否为0即可。
------解决方案--------------------
这个问题只能是从头到尾一个一个的判断是否大于零,是最简单的方法,也是最有效的方法,时间复杂度为:
O(n),我不信谁能有时间复杂度小于O(n)的算法。
------解决方案--------------------
10000不算多,很快就完成了
如果只是要确定有没有大于0的数,
那么很简单啊:逐个进行或操作,看最后的结果是否大于0
------解决方案--------------------
1. 遍历的速度应该是最快的了。
2. 如果还想再快,就在多核的机器上,用多线程分段进行遍历。
------解决方案--------------------
while+break+外部变量
进入while前初始化外部变量int ui=0
当检查到大于0的数的时候 设为1并break
后面的代码查询ui是否为1即可
------解决方案--------------------
探讨

10000不算多,很快就完成了
如果只是要确定有没有大于0的数,
那么很简单啊:逐个进行或操作,看最后的结果是否大于0

------解决方案--------------------
不预先处理,只有O(n)了。
------解决方案--------------------
探讨
1. 遍历的速度应该是最快的了。
2. 如果还想再快,就在多核的机器上,用多线程分段进行遍历。

------解决方案--------------------
探讨
1. 遍历的速度应该是最快的了。
2. 如果还想再快,就在多核的机器上,用多线程分段进行遍历。

------解决方案--------------------
如果你这种查询只有一次,那么遍历是最好办法,如果多次用,就先排序然后二分
------解决方案--------------------
#include <iostream> 
using namespace std;
int main() 
{
int a[5];
printf("input the numbers:");
for(int i=0;i<5;i++)
{
scanf("%d",&a[i]);
}

int flag=1;

for(int j=0;j<5;j++)
{
if((a[j]<0)||(flag==0))
flag=0;
}

if(flag==1)
printf("this array is bigger zero");
else
printf("this array is smaller zero");

return 0;
}

基本实现
------解决方案--------------------
qsort
bsearch
------解决方案--------------------
探讨
数组内容不能进行修改,也就是不能进行排序,因为排序后,这个数组表示的内容就不一样了。

------解决方案--------------------
#include <iostream> 
using namespace std;
int main() 
{
int a[5];
printf("input the numbers:");
for(int i=0;i<5;i++)
{
scanf("%d",&a[i]);
}

int flag=1;
for(int j=0;(flag)&&(j<5);j++)
{
if((a[j]>0)||(flag==0))
flag=0;
}

if(flag==0)
printf("this array is bigger zero");
else
printf("this array is smaller zero");

return 0;
}

改进一下 只要有数组元素大于0的 将flag置0,只要flag置0 就跳出for循环 也就是碰到大于0的就跳出了 不会遍历a[n]整个数组元素了 

输出 
有元素大于0则输出 this array is bigger zero
否则输出 this array is smaller zero
------解决方案--------------------