如何从列表中打印最高的10个号码?如何在C++中执行此操作,从此列表中打印出最高的10个数字?
这是我的数字列表,我是编程新手,我知道我必须使用数组,但我不确定之后。
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71
如何从列表中打印最高的10个号码?如何在C++中执行此操作,从此列表中打印出最高的10个数字?
这是我的数字列表,我是编程新手,我知道我必须使用数组,但我不确定之后。
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71
如果在载体保持这些数字,你可以使用std ::排序()
vector
如果你将数字保存在任何支持随机访问的容器中,你可以使用'std :: sort'(或者更好的'std :: partial_sort')。 – 2013-03-27 16:24:06
你可以用数组初始化向量,你不需要push_back – 2013-03-27 16:31:08
你会想看看std::partial_sort
功能,与operator>
结合。
更不用说'operator <<'和一些容器类型。 – 2013-03-27 16:17:42
我可能会使用['std :: max_element'](http://en.cppreference.com/w/cpp/algorithm/max_element)。 – 2013-03-27 16:36:57
把你的号码在数组 (理想情况下读取一个文件编号列表) 排序中(使用现有的功能,建议其他的答案,OR,递减的顺序排列,我想这是一个过程exercice (i = 0; i < 10; i ++) print array [i];使用在类中解释的算法
对不起,它开始看起来像代码...
排序数组第一。
获取aray的大小,并将其用作索引。然后写一个像循环:
for(int index = size -1; index >=0; index--)
// print here
如果该列表是非常大的,使用sort
也不是很有效的,因为你只想要找到10
最大的元素。更好的方法是使用10
元素构建最小堆,当堆大小小于10
时,将元素插入堆中。之后,当新元素出现时,将元素与堆的根进行比较,如果元素大于root,则插入堆并删除当前堆头,此过程将重复,直到完成扫描列表中的所有元素为止。该算法的时间复杂度为“O(nlogk)”,其中n
是元素的总数,k
是10。如果使用排序,则在O(nlogn)
中效率更高。您需要了解二进制堆在C++中的工作原理,并且您可以应用std容器来轻松实现一个适用于您的容器。
但是,使用std::sort
是蛮力的方式,容易理解。
你可以通过几种方式来做到这一点: 假设你的列表中有N个元素,你必须选择X个最高元素。 1)对数组进行排序,然后选择X个最高元素元素。现在,由于排序将花费O(NlogN)时间,并且您的选择将花费O(X)时间,因此总体复杂度将为O(NlogN)。 2)不要对你的数组排序,只是遍历列表找到最高的元素,然后再次遍历找到下一个最高的元素,等等,直到你得到X个最高元素。复杂度O(X * N)当X < logN时最好的方法是更好的。
3)您可以使用固定(X)大小的最大堆优化方法2,如果它们大于最大堆中的最小元素,则遍历列表插入元素到列表中。复杂性O(NLogX)。
下面应该工作:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v;
for(unsigned i = 0; i < 100; ++i) {
v.push_back(i);
}
std::random_shuffle(v.begin(), v.end());
std::partial_sort(v.begin(), v.begin() + 4, v.end());
for(unsigned k = 0; k < 4; ++k) {
std::cout << k << "-th element is " << v[k] << '\n';
}
}
了一份关于复杂性,因为其他人已经指出了这一点。在这种情况下,它通常是更好使用partial_sort,因为它在这种情况下具有更好的复杂性。但是如果你只是玩弄一个玩具实例,那么完整的排序也可以解决你的问题。
下一次,显示更有点像你尝试过的代码和你在文献中找到什么工作等
请不要给我的代码,告诉我,我需要做的。 – 2013-03-27 16:13:41
显示您尝试过的代码。 – chris 2013-03-27 16:14:31
你的数字清单是否总是要排序?如果是这样,这很“容易”。 – 2013-03-27 16:14:48