找女朋友

来源:互联网 发布:纳网科技域名续缴费 编辑:程序博客网 时间:2024/05/15 22:48


这道题的算法思想就是快速排序:通过一趟排序将一组元素分割成独立的两部分,其中一部分的元素均比另一部分的元素小,则可分别对这两部分元素继续进行排序,使整个序列有序。

代码如下:

#include <stdio.h>
int a[1000000];
void QuickSort(int low,int high){/*快速排序函数*/
    int p;
    if(low<high){
        p=Partition(low,high);//算出p的值,将数组a一分为二;
        QuickSort(low,p-1);//将p左边的元素进行递归快速排序;
        QuickSort(p+1,high);//将p右边的元素进行递归快速排序;
    }
}
int Partition(int low,int high){//对数组进行排序,使p左边的元素均小于p,使p右边的元素均大于p;
    int p,d;
    p=a[low];
    while(low<high){
        while(low<high&&a[high]>=p)
            high--;
        d=a[low];//将比p小的交换到低的一端;
        a[low]=a[high];
        a[high]=d;
        while(low<high&&a[low]<=p)
            low++;
        d=a[low];//将比p大的交换到高的一端;
        a[low]=a[high];
        a[high]=d;
    }
    return low;
}
int main(){
    int n,i,j,d;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    QuickSort(0,n-1);
    for(i=n-1;i>=0;i--){
        if(i==n-1)
            printf("%d",a[i]);
        else
            printf(" %d",a[i]);
    }
    printf("\n");
    return 0;
}

0 0