MLE:对于这段代码该如何优化

P1923 【深基9.例4】求第 k 小的数

misaka2784 @ 2023-05-27 17:04:17

如题

//
//  main.c
//  p1923
//
//  Created by yamixiu on 2023/05/22.
//

#include <stdio.h>
#define MAX 5000010
int a[MAX],n,k;

void swap(int*a,int*b){
    int t=*a;*a=*b;*b=t;
}

void q_sort(int l,int r,int*flag){
    if(l>=r&&(l==k||r==k)){
        printf("%d",a[k]);
        *flag=1;
    }
    if(l>=r)return;
    int mid=l+r>>1;
    int pivot = a[mid];
    int i=l-1,j=r+1;
    while (i<j) {
        while(a[++i]<pivot);
        while(a[--j]>pivot);
        if(i<j)swap(&a[i],&a[j]);
    }
    if(k<=j)q_sort(l, j, flag);
    else q_sort(i, r, flag);
}
int main(int argc, const char * argv[]) {
    scanf("%d%d", &n, &k);
    for(int i=0;i<n;i++)scanf("%d",&a[i]);
    int flag =0;
    q_sort(0,n-1
           ,&flag);
    return 0;
}

by misaka2784 @ 2023-05-27 17:06:58

if(*flag)return; 这个漏掉了,是加在排序函数的第一行,但是依然过不了


|