ModricWang's QuickSort
时间限制:1000ms 内存限制:65536kb
通过率:64/92 (69.57%)
正确率:64/306 (20.92%)
解析:
本题在理解快排的基础下十分简单。题目采用取中间数为标志值的方法,但要注意:题中只给出了划分的方法,输出时应当按照题目的划分输出第二部分。
代码:
#include<cstdio>
#define maxn 1000007
int a[maxn];
void mov(int &a,int &b)
{
int hold = a;
a = b;
b = hold;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
int i = 0;
int j = n-1;
int mid = n/2;
int key = a[mid];
while(i < j)
{
while(a[i] <= key)
{
i++;
}
while(a[j] > key)
{
j--;
}
mov(a[i],a[j]);
}
mov(a[i],a[i-1]);
int tem = i;
i = 0;
j = tem - 1;
mid = tem/2;
key = a[mid];
while(i < j)
{
while(a[i] <= key)
{
i++;
}
while(a[j] > key)
{
j--;
}
mov(a[i],a[j]);
}
mov(a[i],a[i-1]);
for(int k = i;k < tem;k++)
{
printf("%d ",a[k]);
}
puts("");
}
}