已经优化了快速排序但还是超时 求助大佬!!!
查看原帖
已经优化了快速排序但还是超时 求助大佬!!!
1188454
KongY11楼主2023/12/20 16:17

取中间值为哨兵 但还是超时了

以下为代码

#include<stdio.h>

int a[100005]={0};

int Partition (int *a,int low,int high);
void swap (int *a,int *b); 
void QSort(int *a,int low,int high);

int main()
{	
	int i;
	int n;
	scanf("%d",&n);
	for (i=0;i<n;i++)
		scanf("%d",&a[i]);
	QSort(a,0,n-1);
	for (i=0;i<n;i++)
		printf("%d",a[i]);
	return 0;
}


int Partition (int *a,int low,int high)
{
	int key;
	int m=low+(high-low)/2;
	key=a[m];
	while (low<high)
	{
		while (low<high && a[high]>key)
			high-=1;
		swap(&key,&a[high]);
		while (low<high && a[low]<key)
			low+=1;
		swap(&a[low],&key);
	}
	return low;
}


void swap (int *a,int *b)
{
	int t;
	t=*a;
	*a=*b;
	*b=t;
}


void QSort(int *a,int low,int high)
{
	if (low<high)
	{
		int key;
		key=Partition(a,low,high);
		QSort(a,low,key-1);
		QSort(a,key+1,high);
	}
}

2023/12/20 16:17
加载中...