快排,TLE后面三个点
查看原帖
快排,TLE后面三个点
555584
weiming3楼主2023/3/8 16:59

是基准数的问题吗?我基准数设在右边,二分后与中间数交换

#include<iostream>
#include<vector>
using namespace std;
int partition(vector<int>  &a, int left, int right) {
	int pivot1 = left - 1;
	for (int i = left; i <= right - 1; i++) {
		if (a[i] < a[right]) {
			pivot1++;
			swap(a[i], a[pivot1]);
		}
	}
	swap(a[pivot1 + 1], a[right]);
	return pivot1 + 1;
}
void quicksort(vector<int>  &a, int left, int right) {
	if (left < right) {
		int pivot_index = partition(a, left, right);
		quicksort(a, left, pivot_index - 1);
		quicksort(a, pivot_index + 1, right);
	}
}
int main() {
	int n;
	cin >> n;
	vector<int> a;
	for (int i = 0; i <= n - 1; i++) {
		int x;
		cin >> x;
		a.push_back(x);
	}
	quicksort(a, 0, n - 1);
	for (int i = 0; i <= n - 1; i++) {
		cout << a[i] << " ";
	}
	cout << endl;
	return 0;
}
2023/3/8 16:59
加载中...