求助,第二个一直TLE
查看原帖
求助,第二个一直TLE
565044
budayang楼主2022/2/26 16:58
#include<iostream>
#include<stdlib.h>
using namespace std;
int arr[100005];
int midnum(int a,int b,int c)
{
	if(arr[a]>arr[b]>arr[c] || arr[c]>arr[b]>arr[a]) return b;
	if(arr[a]>arr[c]>arr[b] || arr[b]>arr[c]>arr[a]) return c;
	if(arr[b]>arr[a]>arr[c] || arr[c]>arr[a]>arr[b]) return a;
}
void swap(int& x, int& y)
{
	int temp = x;
	x = y;
	y = temp;
}
void qsort(int L, int R)
{
	if (L < R)
	{
		int pivot = midnum(L,R,(L+R)/2);
        swap(arr[pivot],arr[R]); 
		int key = arr[R];
		int i = L;
		int j = R;
		while (i < j && arr[i] <= key)i++;
		while (i < j && arr[j] >= key)j--;
		swap(arr[i], (i == j) ? arr[R] : arr[j]);
		qsort(L, j - 1);
		qsort(i + 1, R);
	}
}
int main()
{
	std::ios::sync_with_stdio(false);std::cin.tie(0);
	int m;
	cin >> m;
	for (int i = 0; i < m; i++)
		cin >> arr[i];
	qsort(0, m - 1);
	for (int i = 0; i < m; i++)
		cout << arr[i] << " ";
	return 0;
}
2022/2/26 16:58
加载中...