回答
使用霍尔的选择算法(或中位数的中位数,如果你需要绝对肯定的计算复杂度),然后添加一个分区(和鸿沟由其大小来获得平均值)。
这比排序而不是分区的显而易见的方法快一点 - 分区是(O(N)
)其中排序是O(N log(N))
。
编辑:在C++中,对于真正的代码(即除了家庭作业以外的任何部分需求完全由您自己完成任务),您可以使用std::nth_element
将输入划分为前5等。
EDIT2:这里还有一个快速的演示,以补充@Nils',但是这一次完全C++ 11个法衣(这么说):
#include <numeric>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main(){
std::vector<int> x {1, 101, 2, 102, 3, 103, 4, 104, 5, 105, 6};
auto pos = x.end() - 5;
std::nth_element(x.begin(), pos, x.end());
auto sum = std::accumulate(pos, x.end(), 0);
auto mean = sum/std::distance(pos, x.end());
std::cout << "sum = " << sum << '\n' << "mean = " << mean << "\n";
return 0;
}
排序是按升序和添加最后五个号码
杰里已经解释它是如何工作的。我只是想在C添加实用的代码示例++:
#include <algorithm>
int averageTop5 (int list[100])
{
// move top 5 elements to end of list:
std::nth_element (list, list+95, list+100);
// get average (with overflow handling)
int avg = 0;
int rem = 0;
for (int i=95; i<100; i++)
{
avg += list[i]/5;
rem += list[i]%5;
}
return avg + (rem /5);
}
随着Jerrys的std ::积聚这就变成了一个两班轮,但可能会失败,整数溢出:
#include <algorithm>
#include <numeric>
int averageTop5 (int list[100])
{
std::nth_element (list, list+95, list+100);
return std::accumulate (list+95, list+100, 0)/5;
}
特别是因为你已经有迭代器到正确的位置,我会使用'std :: accumulate'来添加数字。 – 2012-04-26 04:43:54
@jerryCoffin随意修改代码:-) – 2012-04-26 04:44:59
做到了..不知道std :: accumulate ..漂亮的模板。 – 2012-04-26 04:52:40
复制前5数字到数组中。确定该数组中最小元素的位置。对于列表中其余部分的95个数字中的每一个,请将其与该最小数字进行比较。如果新号码较大,则将其替换并重新确定短名单中新的最小号码的位置。
最后,由5
- 1. 从数组中找出最高,最低和平均5个数字的程序
- 2. 如何找到数组中最高的三个数字?
- 3. 在输入的10个数字中找到最高和最低
- 4. 1000个数字的字符串,找到没有数组的最大5位数
- 5. 在Ruby中查找数组中两个数字的总和
- 6. 找到n个大数字的总和
- 7. 找到一个数字的数字总和(在c)
- 8. 如何找到一个数组中的非相邻数字的最大总和的数字指数
- 9. SQL - 查找表中的5个最高数字
- 10. 查找任意数字的第一个和最后一个数字的总和
- 11. 查找数组中的3个连续数字的总和
- 12. 从数组中的2个数字中找出最大和最小数字
- 13. 如何找到整数数组中的第二个最高数字?
- 14. 找到一组数组中最高总和的算法
- 15. 在matlab中查找没有循环的下一个最高和一个数字中次数最少的数字
- 16. AS3 - 如何在数组中找到两个最大的数字
- 17. 你如何在vb.net中找到5个最大的数字?
- 18. 最有效的方法来找到两个数字的总和
- 19. 找到数字100中的数字总和! (我while循环不会停止)
- 20. 查找序列中下一个最高和最低的数字
- 21. 找到列中的最高数字
- 22. 找到两个最大数字3的总和
- 23. 一个数字中连续数字的最大总和
- 24. R:得到三个数字的所有组合,总计为100
- 25. 1000个数字的字符串,使用子串方法找到最大的5位数字,没有数组
- 26. 如何找到数组java中最大的三个数字?
- 27. 如何找到一个数组中最大的数字
- 28. 如何找到数组中最小和最大的数字?
- 29. 从C中的数字字符串找到数字组合的总和
- 30. 如何在数组中找到最大和最小数字c
总结您的阵列和分裂这是功课? – 2012-04-26 04:20:31
不,我想开发一个特定图形的算法,并坚持在这个代码。 – Krishh 2012-04-26 04:22:31
3使用什么语言 – 2012-04-26 04:24:15