60分求助,#1#2WA
查看原帖
60分求助,#1#2WA
319478
zhibuba楼主2020/5/8 16:33
#include <stdio.h>

#define swap(x,y) (SWAP(&(x),&(y)))

void SWAP(int * p_x, int * p_y)
{
	int tmp = *p_x;
	*p_x = *p_y;
	*p_y = tmp;
	return;
}

void i_sort(int L[], int left, int right)
{
	for (int i = left + 1; i <= right; i++)
	{
		int tmp = L[i];
		int j;
		for (j = i; j > 0 && tmp < L[j - 1]; j--)
			L[j] = L[j - 1];
		L[j] = tmp;
	}
	return ;
}

int t_div(int L[], int left, int right)
{
	int cen = (left + right) / 2;
	if (L[left] > L[cen])
		swap(L[left], L[cen]);
	if (L[left] > L[right])
		swap(L[left], L[right]);
	if (L[cen] > L[right])
		swap(L[cen], L[right]);
	swap(L[cen], L[right]);
	return L[right]	;
}

void q_sort(int L[], int left, int right)
{
	if (right - left >= 20)
	{
		int pivot = t_div(L, left, right);
		int i = left, j = right - 1;
		while (1)
		{
			while (L[++i] < pivot)
				;
			while (L[--j] > pivot)
				;
			if (i < j)
				swap(L[i], L[j]);
			else
				break;
		}
		swap(L[i], L[right]);
		q_sort(L, left, i - 1);
		q_sort(L, i + 1, right);
	}
	else
	{
		i_sort(L, left, right);
		return ;
	}	
}

int main(void)
{
	int N;
	int num[100000];
	scanf("%d", &N);
	for (int i = 0; i < N; i++)
		scanf("%d", &num[i]);
	q_sort(num, 0, N - 1);
	for (int i = 0; i < N; i++)
	{
		printf("%d", num[i]);
		if (i < N - 1)
			putchar(' ');
		else
			putchar('\n');
	}
	return 0;
}
2020/5/8 16:33
加载中...