整数の奇数と偶数の並べ替え:最初に大きいものから小さいものへの奇数、小さいものから大きいものへの偶数(stable_partitionの適用)

説明
  10個の整数のシーケンスがある場合、それらを並べ替える必要があります。並べ替えの要件:1。奇数が最初で、偶数が最後です。2。奇数が最大から最小に並べ替えられます。3。偶数が最小から最大に並べ替えられます。

入力
  スペースで区切って10個の整数の行を入力します。各整数の範囲は、0以上100以下です。

出力は
  要件に従ってソートされ、ソート後に10個の整数を含み、数値の間のスペースで区切られた行を出力します。

サンプル入力:4 7 3 13 11 12 0 47 34 98
サンプル出力:47 13 11 7 3 0 4 12 34 98

1.stable_partitionの概要

stable_partitionは、C ++ソート関数のブランチであり、特定のルールを満たすパーツを最上位に配置するために使用されます。たとえば、この質問では、奇数を前に、偶数を後ろに配置する必要があります。

2.操作手順

安定したパーティションの申請フォームは次のとおりです。

vector<int>::iterator it=stable_partition(a.begin(),a.end(),cmp);

cmpは比較関数です。

bool cmp(int &x) {
    
     
	return x % 2;   //奇数放在前面 
}

1を返すと、xは奇数、つまり奇数が前に配置され、返されるのは後半の開始位置、つまり偶数の開始位置になります。

3.この質問のアイデアの分析

安定したパーティションを使用して、前に奇数、後ろに偶数を配置し、前半を大から小、後半を小から大の2つの部分でそれぞれ並べ替え関数を使用します。

4.ACコード

#include<bits/stdc++.h>
using namespace std;

vector<int> a;

bool cmp(int &x) {
    
     
	return x % 2;   //奇数放在前面 
}

int main() {
    
    
	int t;
    for(int i = 0; i < 10; i++) {
    
    
      cin >> t;
      a.push_back(t);
    }
    vector<int>::iterator it=stable_partition(a.begin(),a.end(),cmp);
    sort(a.begin(), it, greater<int>());
    sort(it, a.end(), less<int>());
    for(vector<int>::iterator iter=a.begin(); iter!=a.end(); iter++) {
    
    
   	  cout << *iter << ' ';
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/Cyril_KI/article/details/109557671