请问为何快速排序记录步数不行
查看原帖
请问为何快速排序记录步数不行
195044
2233颗GoldenEgg楼主2023/12/19 00:16
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
#define For(i, j, n) for(int i = j ; i <= n ; ++i)
using namespace std;

const int N = 10005;

int n, a[N];

int get_pivot(int q[], int l, int r)
{
    int mid = l + r >> 1;
    if(q[r] > q[mid]) swap(q[r], q[mid]); // r <= mid
    if(q[l] < q[r]) swap(q[l], q[r]); // l >= r
    if(q[l] > q[mid]) swap(q[l], q[mid]); // l <= mid
    swap(q[l], q[r]); // 中位数在r
    return q[r];
}

int ans;

inline void quick_sort(int a[],int l,int r)
{
    if(l==r) return ;
    int x=a[l+r>>1],i=l-1,j=r+1;
    while(i<j)
    {
        do i++;while(a[i]<x);
        do j--;while(a[j]>x);
        if(i<j)
        {
            ans++;
            swap(a[i], a[j]);
        }
    }
    quick_sort(a,l,j);quick_sort(a,j+1,r);
}

int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    quick_sort(a, 1, n);
    printf("%d\n", ans);
    return 0;
}

如上,一边快排一边记录交换次数,请问为啥只能得10分

2023/12/19 00:16
加载中...