根据快速排序的定义,主元元素是在排序前后位置不变的元素。
一个元素能不能当主元的条件是:
左边:元素的最大值要小于当前值 ; 右边:元素的最小值要大于当前值
也就是说,当前元素 a[i] 必须是 arr[0]-arr[i]的最大值、arr[i]-arr[N-1]的最小值.
维护好两个数组:左侧最大值、右侧最小值 依次比较输出
并不需要对num数组进行排序
#include<iostream>
#include<algorithm>
using namespace std;
int main(void)
{
int N;
scanf("%d", &N);
int* s = new int[N];
int* max_arr = new int[N];
int* min_arr = new int[N];
int* num