用这题来写写快排~
4936: 特殊排序
Time Limit: 1 Sec Memory Limit: 32 MB
[Submit][Status][Web Board]
Description
输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序。
Input
输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。
接下来的一行有N个整数。
Output
可能有多组测试数据,对于每组数据,
第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。
第二行将排序的结果输出。
Sample Input
5
5 3 2 4 1
Sample Output
5
1 2 3 4
HINT
如果数组中只有一个数,当第一行将其输出后,第二行请输出"-1"。
代码~://完全可以直接用stl的sort,但是我想自己写一下快排
#include <stdio.h>
int a[1005],N;
void quick_sort(int left,int right)
{
int temp = a[left];
int i = left,j = right,t;
if(left > right)
return;
while(i != j)
{
while(a[j] >= temp && i < j )
j--;
while(a[i] <= temp && i < j)
i++;
if(i < j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
quick_sort(left,i-1);
quick_sort(i+1,right);
}
int main()
{
while(~scanf("%d",&N))
{
for(int i = 0; i < N; i++)
{
scanf("%d",&a[i]);
}
quick_sort(0,N-1);
int max_a = a[N-1];
printf("%d\n",max_a);
if(N == 1) printf("-1\n");
else
{
int num = 0;
printf("%d",a[0]);
for(int i = 1; i < N-1; i++)
{
printf(" %d",a[i]);
}
printf("\n");
}
}
}