C语言60分 二分法 后俩个RE 求帮助谢谢!
查看原帖
C语言60分 二分法 后俩个RE 求帮助谢谢!
971954
a1760084203楼主2023/4/15 12:20
#include <stdio.h>
int Partition(int* a, int left, int right)
{
    int pivot = a[left];
    while (left < right)
    {
        while (left < right && a[right] > pivot)
            right--;
        a[left] = a[right];
        while (left < right && a[left] <= pivot)
            left++;
        a[right] = a[left];
    }
    a[left] = pivot;
    return left;
}
void quick(int* a, int left, int right)
{
    int stack[1000000], top = -1;
    stack[++top] = left;
    stack[++top] = right;
    while (top >= 0)
    {
        right = stack[top--];
        left = stack[top--];
        int pivot = Partition(a, left, right);
        if (pivot - 1 > left)
        {
            stack[++top] = left;
            stack[++top] = pivot - 1;
        }
        if (pivot + 1 < right)
        {
            stack[++top] = pivot + 1;
            stack[++top] = right;
        }
    }
}
int main()
{
    int N,M, a[100000];
    scanf("%d %d", &N,&M);
    for (int i = 0; i < N; i++)
    {
        scanf("%d", &a[i]);
    }
    quick(a, 0, N - 1);
    
        printf("%d ", a[M]);
    
    return 0;
}
2023/4/15 12:20
加载中...