忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ソートと降順(逆順)ソート ~~ C++ ~~

ききひじの競プロ備忘録

・ソート

必要なヘッダファイルは<algorithm>
以下の方法で、データを昇順(小→大)にすることができる。
処理としてはクイックソートを行っているはず。
例えばvectorをソートするならば、

#include <algorithm>
#include <iostream>

int main() {
  vector<int> A(5);
  for (int i = 0; i < 5; ++i) {
    cin>>A[i];
  }

  //肝心のソート部
  sort(A.begin(), A.end());
  for (int i = 0; i < 5; ++i) {
    cout<<A[i]<<" ";
  }
  cout<<endl;
}

例えば上記のコードで
  7 3 4 1 9
と入力すれば、
  1 3 4 7 9
と結果が出力される。

・降順ソート

先のソートでは昇順でソートされた。
これを降順(大→小)でソートするにはどうすればいいか。
ヘッダファイルは上記の<algorithm>に加えて<functional>も必要となる。
#include <algorithm>
#include <functional>  //これが必要
#include <iostream>

int main() {
  vector<int> A(5);
  for (int i = 0; i < 5; ++i) {
    cin>>A[i];
  }

  //肝心のソート部
  sort(A.begin(), A.end(), greater<int>());

for (int i = 0; i < 5; ++i) { cout<<A[i]<<" "; } cout<<endl; }

例えば上記のコードで
  7 3 4 1 9
と入力すれば、
  9 7 4 3 1
と結果が出力される。

降順ソート別解

以下の方法でも逆順ソートは達成できる。
またこの場合は<functional>は不要となる。
ただ、実行速度はこちらの方が劣るとか。
#include <algorithm>
#include <iostream>

int main() {
  vector<int> A(5);
  for (int i = 0; i < 5; ++i) {
    cin>>A[i];
  }

  //肝心のソート部
  sort(A.rbegin(), A.rend());
for (int i = 0; i < 5; ++i) { cout<<A[i]<<" "; } cout<<endl; }

・因みに…

std::sort()
std::greater<Type>()
とstdです。

拍手[5回]

PR