快速排序中,如果某个元素左边的全部元素都小于该元素,右边的全部元素都大于该元素,则该元素可被认为待选主元。
对原序列进行 sort ( ) 排序,与原序列进行逐个比较,当 num [ i ] == sortnum [ i ] 并且其左侧元素序列的最大值 max 小于该元素时,就可以认为它一定是主元。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int pivot[100001];
int main(){
int n;
cin >> n;
vector<int> num(n),sortnum(n);
for(int i=0;i<n;i++){
cin >> num[i];
sortnum[i] = num[i];
}
sort(sortnum.begin(),sortnum.end());
int max=0,count=0;
for(int i=0;i<n;i++){
if(num[i] == sortnum[i] && num[i] > max)
pivot[count++] = num[i];
if(num[i] > max)
max = num[i];
}
cout << count << endl;
for(int i=0;i<count;i++)
(i == 0) ? (cout << pivot[i]) : (cout << " " << pivot[i]);
cout << endl;
}