1101 Quick Sort (25分)

1.pivot的左边<   右边>

2.左边最大值<=pivot  右边最小值> pivot即可  一次遍历存储每个i左边最大值,右边最小值即可完成

3.我想模拟一遍  所以没有采用2的方法   然后  TLE一部分 

模拟思路:

1.一次就好 无需递归

2.注意ki为区分点  和之前快排模板里的low high区分开,即判定条件适当改变

3.加flag标记是否交换  交换则说明不是pivot位置

#include 
using namespace std;

void QuickSort(vector Array,vector &ans, int left,int right, int ki) {
	int low,high;
	
	bool flag = true;
	if(left>=right) return;
	
	low=left,high=right;
	int key = Array[ki];//pivot
	
	while(kilow && Array[low]<=key) low++;
		if(ki > low) {
			Array[ki]=Array[low];
			ki = low;
			flag = false;
		}
	}

	Array[ki]=key;
	if(flag) {
		ans.push_back(key);
	}
//	QuickSort(Array,left,low-1);
//	QuickSort(Array,low+1,right);
}

int main() {
	ios::sync_with_stdio(false);
    cin.tie(NULL);
	int i, n;
	cin>>n;
	vectora(n), ans;

	for(i=0; i 0) printf("%d",ans[0]);
    for(i=1;i

 

你可能感兴趣的:(PAT,排序)