快速排序——找女朋友

找女朋友

Time Limit: 15 ms Memory Limit: 65536 KiB

Submit Statistic Discuss

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_40616644/article/details/81741633