找女朋友
Time Limit: 15 ms Memory Limit: 65536 KiB
Problem Description
山东理工大学有很多学生,当然也有很多美女,机械实验班的学委(外号:大王八)很想找个女朋友,但他想找个身高和自己相配的女生做女朋友,现有理工大N个美女的身高数据,但由于N的值较大,为了尽快找到合适的女友,大王八想请你帮他完成这N个美女的身高排序,按降序排列。
Input
输入包括两行,第一行是一个正整数N(N<=1000000),表示理工大共N个美女。第二行有N个正整数分别表示N位美女的身高,每个正整数的值不会超过10^9。 (输入数据之间会用空格隔开)
Output
输出只有一行,为这N个数的降序序列,数与数之间用空格隔开。
Sample Input
5 1 3 2 5 4
Sample Output
5 4 3 2 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a[1000000],n;//定义全局变量 在子函数中使用
void quicksort(int left,int right) // 两个边界
{
int i,j,t,temp;
if(left > right) //如果左大于右返回
{
return ;
}
temp = a[left]; //让基准判断的数为第一个数
i = left;j = right;//让ij分别表示左右的标
while(i != j) //相等表示查找完毕
{ //顺序很重要,先从右往左找
while(a[j] <= temp && i < j) //在右面找一个大于基准数的数,找到就跳出来
j--;
//在从左往右
while(a[i] >= temp && i <j) //左面找一个小于基准数的数,找到跳出
i++;
if(i < j) //如果i在j左面
{
t = a[i];
a[i] = a[j]; //交换值
a[j] = t;
}
}
//最终将基准数归位
a[left] = a[i]; //基准数与结束时的a[i]交换
a[i] = temp;
quicksort(left,i - 1);//完成左边
quicksort(i+1,right); //完成右边
}
int main()
{
int n,i;
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
quicksort(0,n-1);//left 为0,right 为n-1
for(i = 0;i < n;i++)
{
if(i == 0)printf("%d",a[i]);
else printf(" %d",a[i]);
}
printf("\n");
return 0;
}