80分,最后一个节点超时,求大佬帮助!
查看原帖
80分,最后一个节点超时,求大佬帮助!
784813
SakurajiamaMai楼主2023/2/28 18:51
#include<stdio.h>
#define max 100000
int main()
{
    int n,i,j;
    int a[max]={0};
    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;
}
void Qsort(int a[],int low,int high)
{
    if(low<high)
    {
        int x;
        x=partition(a,low,high);
        Qsort(a,low,x-1);
        Qsort(a,x+1,high);
    }
}
int partition(int a[], int low, int high)
{
    int mid = low + (high - low) / 2;//确定中间元素的下标
	if (a[low] > a[high])
	{
		swap(a, low, high);//交换左右端数据,保持左端较小
	}
	if (a[mid] > a[high])
	{
		swap(a, high, mid);//交换中右端数据,保证中间较小
	}
	if (a[mid] > a[low])
	{
		swap(a, mid, low);
	}
	int pivotkey = a[low];
	while (low < high)
	{
		while (low < high && a[high] >= pivotkey)
		{
			high--;
		};
		swap(a, low, high);
		while (low < high && a[low] <= pivotkey)
		{
			low++;
		}
		swap(a, low, high);
	}
	return low;
}
void swap(int a[],int low,int high)
{
    int temp;
    temp=a[low];
    a[low]=a[high];
    a[high]=temp;
}

2023/2/28 18:51
加载中...