步丶丶 2016-07-23 07:26 采纳率: 0%
浏览 1069

[PAT]c语言程序快速排序的代码看不懂,这片代码不像网上的快速排序代码啊。

在做PAT的是时候,用普通的快速排序,在评分后会出现运行超时。

而在网上找到的这种代码不会出现,但是看不懂代码是什么意思,还求前辈解释。

 #include <stdio.h>

#define MAXN 10
typedef float ElementType;

ElementType Median(ElementType A[], int N);

int main()
{
    ElementType A[MAXN];
    int N, i;

    scanf("%d", &N);
    for (i = 0; i<N; i++)
        scanf("%f", &A[i]);
    printf("%.2f\n", Median(A, N));
    return 0;
}

/*您的代码将被嵌在这里*/

void Swap(ElementType *a, ElementType *b) 
{
    ElementType temp = *a;
    *a = *b;
    *b = temp;
}

ElementType Median3(ElementType A[], int left, int right) 
{
    int Center = (left + right) / 2;
    if (A[left] > A[Center])
        Swap(&A[left], &A[Center]);
    if (A[left] > A[right])
        Swap(&A[left], &A[right]);
    if (A[Center] > A[right])
        Swap(&A[Center], &A[right]);
    Swap(&A[Center], &A[right - 1]);
    return A[right - 1];
}

void QSort(ElementType A[], int left, int right) 
{
    if (left >= right) return;
    ElementType Pivot = Median3(A, left, right);
    int i = left, j = right - 1;
    while (1) {
        while (A[++i] < Pivot) {}
        while (A[--j] > Pivot) {}
        if (i < j){
            Swap(&A[i], &A[j]);
        }
        else break;
    }
    Swap(&A[i], &A[right - 1]);
    QSort(A, left, i - 1);
    QSort(A, i + 1, right);
}

ElementType Median(ElementType A[], int N) 
{
    QSort(A, 0, N - 1);
    return A[N / 2];
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2016-07-23 14:58
    关注

    典型的快速排序代码,快速排序代码的特征,先将数据分区,然后移动成两堆,最后对两堆再递归调用快速排序。

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)