このリストから上位 10 個の数字を出力するにはどうすればよいですか?
これは私の数字のリストです。プログラミングは初めてです。配列を使用する必要があることは知っていますが、その後はわかりません。
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71
このリストから上位 10 個の数字を出力するにはどうすればよいですか?
これは私の数字のリストです。プログラミングは初めてです。配列を使用する必要があることは知っていますが、その後はわかりません。
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71
std::partial_sort
と組み合わせて、関数を確認する必要がありoperator>
ます。
これらの数値をベクトルに保持する場合は、 std::sort() を使用できます
最初に配列をソートします。
配列のサイズを取得し、それをインデックスとして使用します。次に、次のような for ループを記述します。
for(int index = size -1; index >=0; index--)
// print here
以下が機能するはずです。
#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 を使用することをお勧めします。ただし、おもちゃのインスタンスをいじるだけなら、完全な並べ替えでも問題を解決できます。
次回は、試したコードや文献で見つけたものなど、もう少し努力を示してください。
リストが非常に大きい場合、最大の要素sort
のみを見つけたいため、使用はあまり効率的ではありません。10
より良い方法は、要素を含む最小ヒープを構築することです。10
ヒープ サイズが より小さい場合は10
、要素をヒープに挿入します。その後、新しい要素が来ると、要素をヒープのルートと比較し、要素がルートよりも大きい場合は、ヒープに挿入して現在のヒープ ヘッドを削除します。このプロセスは、リスト内のすべての要素のスキャンが完了するまで繰り返されます。このアルゴリズムは、時間計算量 "O(nlogk)" で動作します。ここn
で、 は要素の総数でk
、この場合は 10 です。O(nlogn)
ソートを使用するとより効率的です。C++ でバイナリ ヒープがどのように機能するかを理解する必要があり、std コンテナーを適用して、非常に簡単に機能するコンテナーを実装できます。
しかし、使い方std::sort
は強引で分かりやすいです。
数値を配列に入れます(理想的には、ファイル内の数値のリストを読み取ります)配列を降順に並べ替えます(他の回答で提案されているように、既存の関数を使用します、または、説明されたアルゴリズムを使用して、これはコースの演習だと思いますクラス内) for (i = 0; i<10; i++) print array[i];
申し訳ありませんが、コードのように見え始めます...
これはいくつかの方法で行うことができます: リストに N 個の要素があり、X 個の最も高い要素を選択する必要があると仮定します。1) 配列を並べ替えてから、最上位 X 要素の要素を選択します。並べ替えには O(NlogN) 時間がかかり、選択には O(X) 時間かかるため、全体的な複雑さは O(NlogN) になります。
2) 配列を並べ替えないでください。リストを走査して最上位の要素を見つけてから、再度走査して次の最上位の要素を見つけ、X 個の最上位の要素を取得するまで繰り返します。X < logN の場合、最後のアプローチの方が優れている複雑度 O(X*N)。
3)固定(X)サイズの最大ヒープを使用してアプローチ2を最適化できます。最大ヒープの最小要素よりも大きい場合は、要素をリストに挿入してリストをトラバースします。複雑度 O(NLogX)。