2013-03-27 51 views
-2

如何从列表中打印最高的10个号码?如何在C++中执行此操作,从此列表中打印出最高的10个数字?

这是我的数字列表,我是编程新手,我知道我必须使用数组,但我不确定之后。

 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71 
+1

请不要给我的代码,告诉我,我需要做的。 – 2013-03-27 16:13:41

+1

显示您尝试过的代码。 – chris 2013-03-27 16:14:31

+3

你的数字清单是否总是要排序?如果是这样,这很“容易”。 – 2013-03-27 16:14:48

回答

1

如果在载体保持这些数字,你可以使用std ::排序()

+0

vector test; \t test.push_back(3); \t test.push_back(2); \t test.push_back(8); \t test.push_back(23); – 2013-03-27 16:19:44

+0

如果你将数字保存在任何支持随机访问的容器中,你可以使用'std :: sort'(或者更好的'std :: partial_sort')。 – 2013-03-27 16:24:06

+0

你可以用数组初始化向量,你不需要push_back – 2013-03-27 16:31:08

4

你会想看看std::partial_sort功能,与operator>结合。

+0

更不用说'operator <<'和一些容器类型。 – 2013-03-27 16:17:42

+0

我可能会使用['std :: max_element'](http://en.cppreference.com/w/cpp/algorithm/max_element)。 – 2013-03-27 16:36:57

0

把你的号码在数组 (理想情况下读取一个文件编号列表) 排序中(使用现有的功能,建议其他的答案,OR,递减的顺序排列,我想这是一个过程exercice (i = 0; i < 10; i ++) print array [i];使用在类中解释的算法

对不起,它开始看起来像代码...

0

排序数组第一。

获取aray的大小,并将其用作索引。然后写一个像循环:

for(int index = size -1; index >=0; index--) 
    // print here 
0

如果该列表是非常大的,使用sort也不是很有效的,因为你只想要找到10最大的元素。更好的方法是使用10元素构建最小堆,当堆大小小于10时,将元素插入堆中。之后,当新元素出现时,将元素与堆的根进行比较,如果元素大于root,则插入堆并删除当前堆头,此过程将重复,直到完成扫描列表中的所有元素为止。该算法的时间复杂度为“O(nlogk)”,其中n是元素的总数,k是10。如果使用排序,则在O(nlogn)中效率更高。您需要了解二进制堆在C++中的工作原理,并且您可以应用std容器来轻松实现一个适用于您的容器。

但是,使用std::sort是蛮力的方式,容易理解。

0

你可以通过几种方式来做到这一点: 假设你的列表中有N个元素,你必须选择X个最高元素。 1)对数组进行排序,然后选择X个最高元素元素。现在,由于排序将花费O(NlogN)时间,并且您的选择将花费O(X)时间,因此总体复杂度将为O(NlogN)。 2)不要对你的数组排序,只是遍历列表找到最高的元素,然后再次遍历找到下一个最高的元素,等等,直到你得到X个最高元素。复杂度O(X * N)当X < logN时最好的方法是更好的。

3)您可以使用固定(X)大小的最大堆优化方法2,如果它们大于最大堆中的最小元素,则遍历列表插入元素到列表中。复杂性O(NLogX)。

0

下面应该工作:

#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,因为它在这种情况下具有更好的复杂性。但是如果你只是玩弄一个玩具实例,那么完整的排序也可以解决你的问题。

下一次,显示更有点像你尝试过的代码和你在文献中找到什么工作等

相关问题